详解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中“+=”的应用
Feb 02 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
js继承call()和apply()方法总结
Dec 08 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
JS获取图片lowsrc属性的方法
Apr 01 Javascript
AngularJS控制器controller正确的通信的方法
Jan 25 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
Mar 06 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
Sep 03 Javascript
npm 语义版本控制详解
Sep 10 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 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,不用COM,生成excel文件
2006/10/09 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
Stop SQL Server
2007/06/21 Javascript
javascript中的new使用
2010/03/20 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
js实现选项卡效果
2020/03/07 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
详解Python核心对象类型字符串
2018/02/11 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python创建自己的加密货币的示例
2021/03/01 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
中间件的定义
2016/08/09 面试题
我的求职计划书
2014/01/10 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
二手房购房协议书范本
2014/10/05 职场文书
装修公司管理制度
2015/08/05 职场文书
个人向公司借款协议书
2016/03/19 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL