疑问
如何编写preset
Plugin的使用
- 如果需要传参就用数组格式,第二个元素为参数。
Plugin的格式
第一种是一个函数返回一个对象的格式:
第二种格式就是直接写一个对象,这种方式用于不需要处理参数的情况/**
*
* @param {*} api 包含了各种 babel 的 api
* @param {*} options 外面传入的参数
* @param {*} dirname 目录名
* @returns
*/
export default function(api, options, dirname) {
return {
// 指定继承某个插件,和当前插件的 options 合并
inherits: parentPlugin,
// 用于修改 options
manipulateOptions(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