Plugins Babel:replaceWithSourceString提供意外令牌(1:1)
我试图动态替换“import”语句 下面是一个检查导入是否以加号结束的示例Plugins Babel:replaceWithSourceString提供意外令牌(1:1),plugins,build,babeljs,middleware,Plugins,Build,Babeljs,Middleware,我试图动态替换“import”语句 下面是一个检查导入是否以加号结束的示例 module.exports = function(babel) { return { visitor: { ImportDeclaration: function(path, state) { // import abc from "./logic/+" if( ! path.node.source.value.end
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更改为
path.replaceWithSourceString('console.log("Hi")')
这就行了<强>'_(ツ)_/“
真正应该避免使用任何和所有帮助您变得优秀的方法
replaceWithSourceString
,因为正如您所看到的,它不是一个非常好的API。创建要插入脚本的AST的推荐方法是使用。假设这是针对Babel 7.x的,您可以这样做
const importNode = babel.template.statement.ast`import all from "./logic/all"`;
path.replaceWith(importNode);
Babel standalone是否可以这样做?模板在7.12版中似乎不可用。9@cbutler你是不是像OP一样从插件函数的第一个参数中提取了
babel
?它应该也可以独立使用。我的代码与OP有点不同。我可以在这里添加它作为答案,但有人会这样做可能会因为这个对我大喊大叫,或者我可以创建一个新问题。但是当我在控制台中检查Babel时,它不在Babel对象上。我创建了我自己的问题,这里有任何人愿意帮助(将不胜感激)