详解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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
基于JQuery的6个Tab选项卡插件
Sep 03 Javascript
jQuery提交表单ajax查询实例代码
Oct 07 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
超链接的禁用属性Disabled使用示例
Jul 31 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
JavaScript中用let语句声明作用域的用法讲解
May 20 Javascript
详解element-ui中表单验证的三种方式
Sep 18 Javascript
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
使用webpack和rollup打包组件库的方法
Feb 25 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 404错误页面实现代码
2009/06/22 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
javascript事件模型介绍
2016/05/31 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
python中遍历文件的3个方法
2014/09/02 Python
python提示No module named images的解决方法
2014/09/29 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python爬虫超时的处理的实例
2018/12/19 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
在python3中实现更新界面
2020/02/21 Python
Python函数基本使用原理详解
2020/03/19 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
职务聘任书范文
2014/03/29 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电