webpack 处理第三方文件类型的过程:
- 发现这个要处理的文件不是 JS 文件,然后就去配置文件中查找有没有对应的第三方 loader 规则
- 如果能找到对应的规则,就会调用对应的 loader 处理这种文件类型
- 在调用 loader 的时候,是从后往前(从右往左)调用的
- 当最后一个 loader 调用完毕,会把处理结果直接交给 webpack 进行打包合并,最终输出到 bundle.js 中去
通过 Babel 可以帮我们将高级的语法转换为低级的语法
- 在 webpack 中可以运行如下两套命令,安装两套包去安装 Babel 相关的 loader 功能:
- 第一套包:npm i babel-core babel-loader babel-plugin-transform-runtime -D
- 第二套包:npm i babel-preset-env babel-preset-stage-0 -D
- 打开 webpack 的配置文件,在 module 节点下的数组中,添加一个新的匹配规则:
{ test:/\.js$/, use: 'babel-loader', exclude:/node_modules/ }
- 注意:在配置 babel 的 loader 规则的时候,必须把 node_modules 目录,通过 exclude 选项排除掉,原因:如果不排除 node_modules,则 babel 会把 node_modules 中所有的第三方 JS 文件都打包编译,这样会非常消耗 CPU,同时打包速度非常慢;哪怕最终 babel 把所有 node_modules 中的 JS 转换完毕了,但是项目也无法运行
- 在项目的根目录中新建一个叫做 .babelrc 的 babel 配置文件,这个配置文件属于 JSON 格式,所以,在写 babelrc 配置的时候必须符合 JSON 语法规范
- 在 babelrc 中写如下的配置:presets(语法)
{
"presets":["env","stage-0"],
"plugins":["transform-runtime"]
}
- 了解目前安装的 babel-preset-env 是比较新的 ES 语法,之前安装的是 babel-preset-es2015,现在,出了一个更新的语法插件,叫做 babel-preset-env,它包含了所有的和
es\*\*\*\*
相关的语法