如果你喜欢这系列的文章,欢迎star
我的项目,源码地址,点击这里
此页面有部分扩充内容点击查看
npm install babel-loader @babel/core @babel/preset-env @babel/runtime @babel/plugin-transform-runtime -D
.babelrc
文件在 .babelrc
文件中加入以下代码:
{
"presets": [
["@babel/preset-env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
},
"useBuiltIns": "usage"
}]
],
"plugins": [
"@babel/plugin-transform-runtime"
]
}
同时,需要在 webpack.dev.conf.js
文件中,增加 babel-loader
,代码如下:
module: {
rules: [
{
test: /\.(js|jsx)$/,
use: ['babel-loader?cacheDirectory=true'],
include: path.resolve(__dirname, 'src')
}
]
}
至此,babel
相关配置,告一段落
新版中 @babel/runtime
只包含了一些 helpers
,如果需要 core-js
polyfill
浏览器不支持的 API
,可以用 transform
提供的选项 {"corejs": 2}
并安装依赖 @babel/runtime-corejs2
。
由于本项目配置了"useBuiltIns": "usage"
,并且本项目的superSlide
又依赖core-js
,所以这里需要做一些特定的配置,并需要下载@babel/runtime-corejs2
插件。
yarn add @babel/runtime-corejs2 -D
修改.babelrc
文件:
{
// targets, useBuiltIns 等选项用于编译出兼容目标环境的代码
// 其中 useBuiltIns 如果设为 "usage"
// Babel 会根据实际代码中使用的 ES6/ES7 代码,以及与你指定的 targets,按需引入对应的 polyfill
// 而无需在代码中直接引入 import '@babel/polyfill',避免输出的包过大,同时又可以放心使用各种新语法特性。
"presets": [
["@babel/preset-env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
},
"useBuiltIns": "usage"
}]
],
"plugins": [
["@babel/plugin-transform-runtime",{
"corejs": 2
}]
]
}
这里需要说明的是:
@babel/runtime-corejs2
该插件,那么就必须下载core-js
插件,而且是项目依赖,这两个插件在终端下载完后,如果直接运行yarn start
,那么会出现如下警告:WARNING: We noticed you're using the `useBuiltIns` option without declaring a core-js version. Currently, we assume version 2.x when no version is passed. Since this default version will likely change in future versions of Babel, we recommend explicitly setting the core-js version you are using via the `corejs` option.
You should also be sure that the version you pass to the `corejs` option matches the version specified in your `package.json`'s `dependencies` section. If it
doesn't, you need to run one of the following commands:
npm install --save core-js@2 npm install --save core-js@3
yarn add core-js@2 yarn add core-js@3
此时重启终端命令行,再次运行yarn start
就不会出现这个警告了
出现上述警告是因为.babelrc
中缺少配置,这里不仅需要在@babel/plugin-transform-runtime
中声明core-js
的版本,也需要在@babel/preset-env
声明使用core-js
:
{
// targets, useBuiltIns 等选项用于编译出兼容目标环境的代码
// 其中 useBuiltIns 如果设为 "usage"
// Babel 会根据实际代码中使用的 ES6/ES7 代码,以及与你指定的 targets,按需引入对应的 polyfill
// 而无需在代码中直接引入 import '@babel/polyfill',避免输出的包过大,同时又可以放心使用各种新语法特性。
"presets": [
["@babel/preset-env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
},
"useBuiltIns": "usage",
"corejs": 2
}]
],
"plugins": [
["@babel/plugin-transform-runtime",{
"corejs": 2
}]
]
}
此时再次运行yarn start
会发现终端就不会再出现上面那种警告了
Can't resolve 'core-js/library/fn/object/assign
只要是这种找不到core-js/library
,都说明你下载的是3.x
版本的core-js
,在3.x
版本,已经没有library
文件,原来的library
文件夹下的文件,可以在core-js@3
版本的es
文件夹下找到,这里报错的原因是babel
的插件和core-js
的版本对应没有及时更新,所以,我们只能暂时做降级处理,删除3.x
版本的core-js
,并重新下载[email protected]
版本,再次运行yarn start
就不会再出现这种问题了
当我们在.babelrc
文件中做了corejs
相关配置后,我们上面所下载的那些babel
相关插件中就会有关于core-js
的代码会起作用了,目前这些插件的版本中所使用过的corejs
版本还都是2.x
版本,所以配置corejs
时,下载插件如下:
yarn add [email protected]
yarn add @babel/runtime-corejs2 -D
如果后期这些babel
插件对依赖的core-js
版本升级到3.x
,那么上面两个插件就可以更新了:
yarn add core-js
yarn add @babel/runtime-corejs3 -D
@babel/runtime-corejs2
和 @babel/runtime-corejs3
是两个插件,不难看出,一个是corejs
的2.x
版本,一个是3.x
版本,升级到3.x
版本,就需要把.babelrc
文件中对corejs
配置的2
改为3
,这样corejs
这一块的配置就不会再出问题了~
项目中已经安装的babel
相关的插件也都需要升级到7.4.4
版本,否则也还是会报错