疑问
如何编写preset
Plugin的使用
- 如果需要传参就用数组格式,第二个元素为参数。
Plugin的格式
第一种是一个函数返回一个对象的格式:
第二种格式就是直接写一个对象,这种方式用于不需要处理参数的情况/**** @param {*} api 包含了各种 babel 的 api* @param {*} options 外面传入的参数* @param {*} dirname 目录名* @returns*/export default function(api, options, dirname) {return {// 指定继承某个插件,和当前插件的 options 合并inherits: parentPlugin,// 用于修改 optionsmanipulateOptions(options, parserOptions) {options.xxx = '';},// 指定 traverse 时调用的函数visitor: {StringLiteral(path, state) {this.cache.set(path.node.value, 1);}},// pre post分别在遍历前后调用pre(file) {this.cache = new Map();},post(file) {console.log(this.cache);}};}
preset的格式

- 如果需要传参就用数组格式,第二个元素为参数。
preset 就是对 babel 配置的一层封装
- 当plugin较多、或者plugin的options较多时可以考虑使用
export default obj = { plugins: [ pluginA ], presets: [ presetB ] } } ```
顺序
- 【不变】./dir/plugin.js
- 【不变】 /dir/plugin.js
- 【不变】module:aa
- aa -> babel-plugin-aa
- @scope/mod -> @scope/babel-plugin-mod
- @babel/aa -> @babel/plugin-aa
