详解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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
js和as的稳定传值问题解决
Jul 14 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
Dec 08 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
webpack+vue中使用别名路径引用静态图片地址
Nov 20 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
three.js实现圆柱体
Dec 30 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 Javascript
vue中移动端调取本地的复制的文本方式
Jul 18 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入门之连接mysql数据库的一个类
2012/04/21 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
WxPython建立批量录入框窗口
2019/02/27 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
python 通过文件夹导入包的操作
2020/06/01 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
农行实习自我鉴定
2013/09/22 职场文书
后勤主管工作职责
2013/12/07 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
司机岗位职责范本
2015/04/10 职场文书
楚门的世界观后感
2015/06/03 职场文书
发票退票证明
2015/06/24 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS