ESM 中的 with 转换
因为 ESM 模块规范中,对 with 语法是不支持的,所以,对老的模块中用到 with 的代码进行转换。
使用 babel-plugin-transform-with
插件进行转换,原理是对 with 代码块中的方法、变量进行检测,如果是局部变量(Scope.contextVariables),则跳过,如果不是,则有可能是 with 中的方法或变量,则进行转换。
npm init -y
初始化项目npm i babel-plugin-transform-with babel-cli -D
安装依赖touch index.mjs
新建文件
var a = {b: '1'}
with(a) {
var c = b;
}
npx babel index.mjs
转换
var a = { b: '1' };
(function (b) {
var c = b;
})('b' in a ? a.b : typeof b !== "undefined" ? b : undefined);