javascript - 为 babel 6 写一个语法插件

标签 javascript plugins ecmascript-6 babeljs

我最近向 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/

相关文章:

javascript - 完全禁用网页滚动

javascript - Firefox 插件之间的消息

javascript - 将图像 URL 转换为 dataURL - Javascript

javascript - 使用 .catch() 处理未处理的 Promise 拒绝

javascript - 如何在不使用 AJAX 的情况下向 CouchDB 提交数据(使用普通形式的 PUT)

javascript - 无法使用 Node.js 从 mongoDB 检索数据

javascript - jQuery 查找文本并隐藏该文本

android - 将 Android 源插件与 Eclipse ADT 包一起使用

php - Laravel 5.2 - srmklive/laravel-paypal 问题

javascript - 不能在 const 声明中使用 if 语句,但三元运算符有效