likes
comments
collection
share

npm i后babel版本升级踩坑

作者站长头像
站长
· 阅读数 1

最近总是碰到一些问题, 根据同样的package.json,安装之后的版本并不完全固定导致项目启动失败。仔细了解了一下package.json中库的版本号:

~和^的区别

"babel-loader": "^7.0.0",
"body-parser": "~1.15.2"

以版本号x.y.z为例

 x:主版本号, 当你做了不兼容的API修改
  
 y:次版本号, 当你做了向下兼容的功能性问题
  
 z:修订号, 当你做了向下兼容的问题修复

 ~x.y.z, 会更新到y最新的版本, 例如 body-parser: ~1.15.2, 这个库会去匹配到1.15.z的最新版本, 如果出现了1.16.0, 则不会自动升级

 ^x.y.z, 会更新到x的最新版本, 例如 babel-loader: ^7.1.1, 这个库会去匹配7.y.z的最新版本, 如果出现了8.1.1, 则不会自动升级

而我们的package.json默认安装的包大都是以^为主的,所以在运行npm i之后,可能有些包的版本已经发生了变化,以下面的升级为例:

^babel7.0.0安装后 => 实际版本babel 7.11.0

npm run dev

1、报错:Property raw expected type of string but got undefined启动失败,具体信息如下:

npm i后babel版本升级踩坑

2、排查过程:

刚开始一直在排查@babel/core里面的问题,浪费了很多时间,后来发现有个babel-plugin-nornj-in-jsx包很熟悉,点击进入到指定的报错行,发现里面调用了一个babel的方法:TemplateElement

quasis.push(types.TemplateElement({
  cooked: tagName
}));

查看babel的7.11.0该方法对应的文档:

npm i后babel版本升级踩坑

3、原因分析:

@babel/core7.5->@babel/core7.6版本中对必传参数的最终的验证类型做了升级导致的错误:

npm i后babel版本升级踩坑

之前:

npm i后babel版本升级踩坑

升级后:

npm i后babel版本升级踩坑

4、解决方案

@babel/core@babel/types版本固定到7.5.0