pansinm 2022-05-28
我们有个小程序项目叫mini-taro
,使用的是 taro 框架1 开发。
同事球球将项目拉下来后,一直不能通过编译,
依赖的三方包报错 unexpected reserved word 'interface'
。
诡异的是,同样的代码,其他人都可以编译。
粗略定位下,报错的原因是依赖的三分包直接以TypeScript
发布,没有经过babel-loader
编译。
同样的代码,为什么只有培球的没有经过babel-loader
编译,而其他同学的就可以编译呢?
看taro的代码发现,babel-loader
包含 exclude 配置项:
exclude: [filename => /node_modules/.test(filename) && !/taro/.test(filename)]
这个配置项的意思是 node_modules
下且路径中不包含 taro
的文件不用编译。
这下解释得通了:
mini-taro
,按上述规则,项目内所有文件包含node_modules
都会编译。mini
,路径中不包含 taro
,所以三方包没有经过编译,导致报错。将球球的项目重命名为 mini-taro
后,成功通过编译。
在 Taro issue 中也发现了类似异常 Taro构建小程序报错:“enum is a reserved word” 也是类似原因导致。有以下可行方法解决这个问题:
config/index.js
,通过 webpackChain
修改 exclude
taro
字符串至于 taro 为啥要这样设计?不太理解。排除node_modules
可以理解,减少编译时长。
为什么要排除宝行taro
的文件呢?觉得这不是一个好的设计,增加了不确定性。