Skip to content

小橙时光机

Notes

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 的文件不用编译。

这下解释得通了:

  1. 我们小程序项目是 mini-taro,按上述规则,项目内所有文件包含node_modules都会编译。
  2. 球球将项目 clone 到了不同的目录 mini,路径中不包含 taro,所以三方包没有经过编译,导致报错。

将球球的项目重命名为 mini-taro 后,成功通过编译。

在 Taro issue 中也发现了类似异常 Taro构建小程序报错:“enum is a reserved word” 也是类似原因导致。有以下可行方法解决这个问题:

  1. 修改配置config/index.js,通过 webpackChain 修改 exclude
  2. 包名包含 taro 字符串
  3. 项目放到 包含 taro 的路径下(所有代码都会编译,不推荐)

至于 taro 为啥要这样设计?不太理解。排除node_modules可以理解,减少编译时长。 为什么要排除宝行taro的文件呢?觉得这不是一个好的设计,增加了不确定性。


  1. https://github.com/NervJS/taro

pansinm
pansinm
千里之行始于足下