babel 簡單插件

package.json

{
  "name": "babel-test",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "devDependencies": {
    "@babel/core": "^7.13.10"
  }
}

要編譯的原代碼fun.js

const c = '';

babel 插件 plugin.js

module.exports = function(babel) {
    const t = babel.types;
    return {
        visitor: {
            VariableDeclarator(path, state) {
                // 使用a替換變量名c
                if(path.node.id.name == 'c'){
                    path.node.id = t.identifier('a')
                }
                // 使用["any"]替換字符串字面量
                if (t.isStringLiteral(path.node.init)) {
                    const element = t.stringLiteral('any');
                    path.node.init = t.arrayExpression([element]);
                }
            }
        }
    }
}

編譯文件index.js

const babel = require('@babel/core');
const pluginFunc = require('./plugin');
const configItem = babel.createConfigItem(pluginFunc);
const ret = babel.transformFileSync('fun.js', { plugins: [configItem], ast: true});
console.log(ret.code);

輸出代碼

const a = ["any"];

將code轉化為AST節(jié)點在線查看器 AST explorer

babel.types API

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容