@babel/template
我们再
@babel/types
使用发现再编写复杂的模板的时候较为复杂,@babel/template
就能辅助尼编写ast
例如我们要编写一个如下的ast:
js
const myModule = require("my-module");
我们使用@babel/template
就可以这个样:
第一种:语法占位符
js
import { types } from '@babel/core';
import generate from '@babel/generator';
import template from "@babel/template";
const buildRequire = template(`
const %%importName%% = require(%%source%%);
`);
const ast = buildRequire({
importName: types.identifier("myModule"),
source: types.stringLiteral("my-module"),
});
console.log(generate(ast).code);
输出:
bash
const myModule = require("my-module");
第二种:标识符占位符
js
import { types } from '@babel/core';
import generate from '@babel/generator';
import template from "@babel/template";
const buildRequire2 = template(`
var IMPORT_NAME = require(SOURCE);
`);
const ast2 = buildRequire2({
IMPORT_NAME: types.identifier("myModule"),
SOURCE: types.stringLiteral("my-module"),
});
console.log(generate(ast2).code);
输出:
bash
var myModule = require("my-module");
第三种:模板文字用法
js
import { types } from '@babel/core';
import generate from '@babel/generator';
import template from "@babel/template";
const fn = template`
var IMPORT_NAME = require(SOURCE);
`;
const ast3 = fn({
IMPORT_NAME: types.identifier("myModule"),
SOURCE: types.stringLiteral("my-module"),
});
console.log(generate(ast3).code);
输出:
bash
var myModule = require("my-module");