我最近向 es-discuss 发布了一个提案关于我的一个想法。现在我想尝试编写一个可以执行此操作的 babel 插件。
简短的版本,我想做/支持这个:
import { x, y, z } as myLib from 'lib';
我想我需要更改 - 甚至覆盖 - babel-types for es2015 .
我没有找到很多关于 babel 的 defineType 工作原理或当前 ImportDeclaration
实现工作原理的文档或有用的帖子。
有人可以指点一下 babel 类型系统是如何工作的,特别是与 ImportDeclaration
相关的吗?
This repository似乎正在构建一个 babel-syntax 插件,但使用的是不同的方法(通过 babylon 插件)。这是方法吗?
看到所有 babel 自己的语法插件只是在其他地方切换某些行为的空壳,这有点令人困惑:babel-plugin-syntax-class-properties/src/index.js
Babel 和 babylon 太棒了,我要向实现它的人们表示衷心的感谢!
最佳答案
不幸的是,Babel/Babylon 目前不支持任意自定义语法扩展,我们目前对尚未达到阶段 0 的非官方语法扩展的 PR 不感兴趣。我们确实希望有一天能支持它,但它不是很明显,一旦您到达许多插件正在运行的地步,如何以一种实际上可以很好地协同工作的方式来做到这一点。
该插件通过直接访问 babylon
使用非官方 API:https://github.com/mbrowne/babel-dci/blob/a766680b060ab1aa9601c4c14c5b1e0d514ec314/babel-plugin-syntax-dci/src/babylonPlugin.js#L6
import { types as tt } from "babylon/lib/tokenizer/types";
import Parser from "babylon/lib/parser";
lib
文件夹不公开且不受支持。这也是为什么这个插件将自己固定到特定的和过时的 Babylon 版本的原因:https://github.com/mbrowne/babel-dci/blob/master/babel-plugin-syntax-dci/package.json#L11
关于javascript - 为 babel 6 写一个语法插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37554298/