在使用 babel 插件编译我的代码时,我试图插入一个 import 语句。该语句可能会被多次动态插入,所以我必须确保它之前没有被插入。
我曾经path.scope.hasOwnBinding
并且path.scope.hasBinding
确保它们不会与现有的冲突,但它不适用于动态插入变量。
const conditions = ['view', 'text'];
function Plugin({types: t, template}) {
return {
visitor: {
ImportDeclaration(path, state) {
var node = path.node;
var sourceValue = node.source.value;
conditions.forEach(item => {
if (name === sourceValue) {
// multi insert
if (!path.scope.hasOwnBinding("AsyncComp") && !path.scope.hasBinding("AsyncComp")) {
const myImport = template(`import AsyncComp from "../src/";`, { sourceType: "module" });
path.insertAfter(myImport());
}
if (path.scope.hasOwnBinding("AsyncComp")) {
// never execute
}
if (path.scope.hasBinding("AsyncComp")) {
// never execute
}
}
});
}
}
}
}
我希望他们可以检测到我之前插入的变量,但遇到的错误消息是Duplicate declaration AsyncComp