babel 插件按顺序执行,下一个插件拿不到上一个插件的结果
复现demo
babel.config.js
module.exports = {
plugins: [
"minify-dead-code-elimination",
[path.resolve(__dirname, 'plugin/remove-unused-import.js'), { libraryName: ['subApp']}]
]
};
src/index.js
import strA from 'a';
console.log('index')
if(false){
console.log(strA)
}
src/a.js
const varA = 'varA';
export default varA
执行babel
预期情况:
先用了deadcode,output应该是为
import strA from './a.js';
console.log('index')
再过我的插件。在我的插件Identifier 打印了下
Identifier(path) {
const { name } = path.node
name === 'strA' && console.log(path.node)
}
输出
Node {
type: 'Identifier',
start: 70,
end: 74,
loc: SourceLocation {
start: Position { line: 4, column: 16 },
end: Position { line: 4, column: 20 },
filename: undefined,
identifierName: 'strA'
},
range: undefined,
leadingComments: undefined,
trailingComments: undefined,
innerComments: undefined,
extra: undefined,
name: 'strA'
}
神奇的是我的插件console.log 结果表示拿到了原本应该已经被死码移除删掉的第四行。
无论是单独跑死码移除插件,还是结合我的插件,output都是可以删掉if(false)代码块的。
所以大概率能刨除 babel版本等问题
所以得到结论是第二个插件没能拿到上一个插件执行后的代码? 求大佬解释下
不要问我输出是啥意思,不要怀疑我的插件有问题。我的插件就在Identifier,执行了console.log。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论