我正在尝试动态替换“导入”语句。
下面是检查导入是否以加号结尾的示例。
module.exports = function(babel) {
return {
visitor: {
ImportDeclaration: function(path, state) {
// import abc from "./logic/+"
if( ! path.node.source.value.endsWith("/+"))
return;
path.replaceWithSourceString('import all from "./logic/all"')
}
}
}
}
这将导致错误
SyntaxError: src/boom.js: Unexpected token (1:1) - make sure this is an expression.
> 1 | (import all from "./logic/all")
问题是replaceWithSourceString is wrapping the string in rounded braces.
如果我将replaceWithSourceString更改为
path.replaceWithSourceString('console.log("Hi")')
这有效。.¯__(ツ)_ /¯
任何人都可以帮助您变得很棒
答案 0 :(得分:1)
replaceWithSourceString
,因为正如您所看到的那样,它并不是一个很好的API。创建用于插入脚本的AST的推荐方法是使用template
。假设这是针对Babel 7.x的,您可以
const importNode = babel.template.statement.ast`import all from "./logic/all"`;
path.replaceWith(importNode);