Skip to content
On this page

@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");

Released under the MIT License.