详解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 相关文章推荐
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
JavaScript异步编程:异步数据收集的具体方法
Aug 19 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
js实现二级菜单渐隐显示
Nov 03 Javascript
js+canvas绘制五角星的方法
Jan 28 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
Jul 20 Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 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
无线电的诞生过程
2021/03/01 无线电
php 操作符与控制结构
2012/03/07 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
python statsmodel的使用
2020/12/21 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
开学寄语大全
2014/04/08 职场文书
文明生主要事迹
2014/05/25 职场文书
本科毕业生自荐信
2014/05/26 职场文书
师德师风自查总结
2014/10/14 职场文书
幼师辞职信范文
2015/02/27 职场文书
党员评议自我评价
2015/03/03 职场文书