taro项目重命名后不能通过编译
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
都会编译。 - 球球将项目 clone 到了不同的目录
mini
,路径中不包含taro
,所以三方包没有经过编译,导致报错。
将球球的项目重命名为 mini-taro
后,成功通过编译。
在 Taro issue 中也发现了类似异常 Taro构建小程序报错:“enum is a reserved word” 也是类似原因导致。有以下可行方法解决这个问题:
- 修改配置
config/index.js
,通过webpackChain
修改exclude
- 包名包含
taro
字符串 - 项目放到 包含 taro 的路径下(所有代码都会编译,不推荐)
至于 taro 为啥要这样设计?不太理解。排除node_modules
可以理解,减少编译时长。
为什么要排除宝行taro
的文件呢?觉得这不是一个好的设计,增加了不确定性。