详解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 Math.random()随机数函数
Nov 04 Javascript
js实现点击链接后延迟3秒再跳转的方法
Jun 05 Javascript
javascript实现继承的简单实例
Jul 26 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
Bootstrap每天必学之折叠(Collapse)插件
Apr 25 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
详解JavaScript常量定义
Jan 03 Javascript
BootStrap select2 动态改变值的方法
Feb 10 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
jQuery常用选择器详解
Jul 17 jQuery
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 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针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
php中请求url的五种方法总结
2017/07/13 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
详解ES6中的let命令
2020/04/05 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
python的类方法和静态方法
2014/12/13 Python
基于Python实现文件大小输出
2016/01/11 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
python截取两个单词之间的内容方法
2018/12/25 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Python中的__init__作用是什么
2020/06/09 Python
Python grpc超时机制代码示例
2020/09/14 Python
英国健身超市:Fitness Superstore
2019/06/17 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
总经理驾驶员岗位职责
2013/12/04 职场文书
安全教育演讲稿
2014/05/09 职场文书
2015年党员承诺书
2015/01/21 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
环保证明
2015/06/23 职场文书
MySQL创建表操作命令分享
2022/03/25 MySQL
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技