详解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 相关文章推荐
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
jquery实现用户打分评分特效
May 28 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
Feb 10 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
Angular异步变同步处理方法
Aug 13 Javascript
axios+Vue实现上传文件显示进度功能
Apr 14 Javascript
JS中async/await实现异步调用的方法
Aug 28 Javascript
JavaScript实现简单的计算器
Jan 16 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
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 事件机制(2)
2011/03/23 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python爬取三国演义的实现方法
2016/09/12 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Python如何使用input函数获取输入
2020/08/06 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
How to spawning asynchronous work in J2EE
2016/08/29 面试题
业务部门经理岗位职责
2014/02/23 职场文书
伊索寓言教学反思
2014/05/01 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
spring boot实现文件上传
2022/08/14 Java/Android