详解babel升级到7.X采坑总结


Posted in Javascript onMay 12, 2019

最近工作比较忙,有一段时间没有写前端玩了。今天试着搭一个项目,发现各种坑,以前用起来非常好的配置文件各种报错。排查后发现原来babel升级了一个大版本,已经到7.X了,这里我总结一下升级过程中踩到的坑。

Error: Cannot find module '@babel/core'
babel-loader@8 requires Babel 7.x (the package '@babel/core'). If you'd like to use Babel 6.x ('babel-core'), you should install 'babel-loader@7'.
  at Function.Module._resolveFilename (module.js:547:15)
  at Function.Module._load (module.js:474:25)
  at Module.require (module.js:596:17)
  at require (internal/module.js:11:18)
  ....

没找到@babel/core,需要把babel-core卸载掉,从新安装@babel/core

npm un babel-core
npm i -D @babel/core
ERROR in ./src/index.jsx
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Plugin/Preset files are not allowed to export objects, only functions.
...

将babel-preset-*卸载,重新安装@babel/preset-*,并且修改 .babelrc中的 presets

比如我的

npm:
- babel-preset-env
+ @babel/preset-env
- babel-preset-react
+ @babel/preset-react
- babel-preset-stage-0

.babelrc:
- "presets": ["react", "env", "stage-0", "mobx"]
+ "presets": ["@babel/preset-react", "@babel/preset-env", "mobx"]

除了上述的preset,我还用了babel-preset-mobx

但是没找到 @babel/preset-mobx,从babel-preset-mobx git提交日志上看,作者已经支持了最新的babel。在之后的测试中,发现mobx的功能也能正常使用。

另外,stage-*已弃用

ERROR in ./src/index.jsx
Module build failed (from ./node_modules/babel-loader/lib/index.js):
TypeError: this.setDynamic is not a function
  at PluginPass.pre
  ...

这次是插件了,一样把babel-plugin-*卸载,重新安装@babel/plugin-*

然后修改.babelrc文件

具体的包名可以在 npm仓库 里找

最终文件

.babelrc:

{
  "presets": ["@babel/preset-env", "@babel/preset-react", "mobx"],
  "plugins": [
    "@babel/plugin-proposal-object-rest-spread",
    "@babel/plugin-transform-runtime"
  ]
}

package.json:

"devDependencies": {
  "@babel/core": "^7.1.0",
  "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
  "@babel/plugin-transform-runtime": "^7.1.0",
  "@babel/preset-env": "^7.1.0",
  "@babel/preset-react": "^7.0.0",
  "babel-loader": "^8.0.2"
  "babel-preset-mobx": "^2.0.0",
  ...
 },
 "dependencies": {
  "@babel/runtime": "^7.0.0",
  ...
 }

总结

这次升级,功能上有什么变化我就不在这里写了,大家可以自行搜索

总的来说,babel舍弃了以前的 babel-*-* 的命名方式,改成了@babel/*-*

修改依赖和.babelrc文件后就能正常启动项目了。

webpack不用修改(除非你是webpack 3.X 升webpack 4.X)

上面的只是我遇到的问题,如果还有其他问题,可以参考资料升级指南 Upgrade to Babel 7

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 获取元素位置的快速方法 getBoundingClientRect()
Nov 26 Javascript
精通Javascript系列之Javascript基础篇
Jun 07 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
Dec 04 Javascript
认识Knockout及如何使用Knockout绑定上下文
Dec 25 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 Javascript
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
JavaScript实现网页头部进度条刷新
Apr 16 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 jQuery
javascript中的event loop事件循环详解
Dec 14 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 #Javascript
vue轻量级框架无法获取到vue对象解决方法
May 12 #Javascript
使vue实现jQuery调用的两种方法
May 12 #jQuery
React优化子组件render的使用
May 12 #Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 #Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
May 12 #Javascript
用js简单提供增删改查接口
May 12 #Javascript
You might like
php指定函数参数默认值示例代码
2013/12/04 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
js代码实现微博导航栏
2015/07/30 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
Python sorted对list和dict排序
2020/06/09 Python
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
小学生田径运动会广播稿
2014/09/11 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
初二学生评语大全
2014/12/26 职场文书
二手车转让协议书
2015/01/29 职场文书
秦兵马俑导游词
2015/02/02 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
通知范文怎么写
2015/04/16 职场文书
车辆挂靠协议书
2016/03/23 职场文书
合同补充协议书
2016/03/24 职场文书
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL