详解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 相关文章推荐
W3C Group的JavaScript1.8 新特性介绍
May 19 Javascript
jquery 简短右键菜单 多浏览器兼容
Jan 01 Javascript
JS delegate与live浅析
Dec 21 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
jQuery取id有.的值的方法
May 21 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
微信小程序 wxapp地图 map详解
Oct 31 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
js编写简单的聊天室功能
Aug 17 Javascript
利用原生的JavaScript实现简单拼图游戏
Nov 18 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 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性能优化 产生高度优化代码
2011/07/22 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
小学生成长感言
2014/01/30 职场文书
班主任新年寄语
2014/04/04 职场文书
婚前财产公证书
2014/04/10 职场文书
设计大赛策划方案
2014/06/13 职场文书
汇报材料怎么写
2014/12/30 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL