2016-05-31 83 views
3

我最近發佈了一個關於我的想法的提案es-discuss。現在我想嘗試寫一個babel插件來做到這一點。爲babel編寫語法插件6

短版,我想這樣做/支持這一點:

import { x, y, z } as myLib from 'lib'; 

我想我需要改變 - 或者重寫偶數的babel-types for es2015

我沒有找到關於babel的defineType作品或當前ImportDeclaration實現如何工作的大量文檔或有用的帖子。

有人可以給我指示巴貝爾類型系統是如何工作的,特別是關於ImportDeclaration

This repository似乎在構建一個babel-syntax插件,但使用了不同的方法(通過巴比倫插件)。這是做到這一點的方式嗎?

這是一個有點混亂,看到所有巴貝爾自己的語法插件是觸發一些行爲別的地方只是個空殼子:babel-plugin-syntax-class-properties/src/index.js

巴貝爾和巴比倫是驚人的,我想發出一個非常感謝正在發生的人們!

回答

2

不幸的是,巴貝爾/巴比倫目前不支持任意自定義的語法擴展,我們目前還不在非官方的語法擴展的PR那些尚未達到階段0.我們要支持有一天感興趣,但一旦你達到許多插件運行的地步,如何以一種實際上可以很好地發揮作用的方式來實現這一點並不明顯。

那插件是通過直接深入到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文件夾是不公開的和不支持。這也是爲什麼這個插件已將自己固定到一個特定的和過時的巴比倫版本:https://github.com/mbrowne/babel-dci/blob/master/babel-plugin-syntax-dci/package.json#L11

+0

我是babel-dci插件的作者,想找到一種方法來升級它,所以它與最新版本的巴貝爾(也是我的擴展Bablyon的方式並不理想),但似乎目前唯一能做到這一點的方法就是分叉巴貝爾。無論如何,只是以爲我會在這裏發佈的情況下,你知道任何關於未來支持自定義語法插件的消息。 –

+0

不幸的是,這不是我期望我們很快就會支持的東西。如果您有更多問題,請隨時加入我們的Slack頻道。 SO對談話並不好。 – loganfsmyth

+0

如何添加像Flow/JSX這樣的自定義語法? – Matt