详解babel升级到7.X采坑总结
最近工作比较忙,有一段时间没有写前端玩了。今天试着搭一个项目,发现各种坑,以前用起来非常好的配置文件各种报错。排查后发现原来babel升级了一个大版本,已经到7.X了,这里我总结一下升级过程中踩到的坑。
Error:Cannotfindmodule'@babel/core' babel-loader@8requiresBabel7.x(thepackage'@babel/core').Ifyou'dliketouseBabel6.x('babel-core'),youshouldinstall'babel-loader@7'. atFunction.Module._resolveFilename(module.js:547:15) atFunction.Module._load(module.js:474:25) atModule.require(module.js:596:17) atrequire(internal/module.js:11:18) ....
没找到@babel/core,需要把babel-core卸载掉,从新安装@babel/core
npmunbabel-core npmi-D@babel/core
ERRORin./src/index.jsx Modulebuildfailed(from./node_modules/babel-loader/lib/index.js): Error:Plugin/Presetfilesarenotallowedtoexportobjects,onlyfunctions. ...
将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-mobxgit提交日志上看,作者已经支持了最新的babel。在之后的测试中,发现mobx的功能也能正常使用。
另外,stage-*已弃用
ERRORin./src/index.jsx Modulebuildfailed(from./node_modules/babel-loader/lib/index.js): TypeError:this.setDynamicisnotafunction atPluginPass.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不用修改(除非你是webpack3.X升webpack4.X)
上面的只是我遇到的问题,如果还有其他问题,可以参考资料升级指南UpgradetoBabel7
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。