往期回顾:
1.处理JS模块
1.1 将es6
代码编译成es5
代码
代码的转化工作要交给babel
来处理
npm install @babel/core @babel/preset-env babel-loader --save-dev
@babel/core
是babel中的核心模块,@babel/preset-env
的作用是es6转化es5插件的插件集合,而babel-loader
是webpack
和loader
的桥梁。
const sum = (a, b) => {
return a + b;
};
增加babel
的配置文件 .babelrc
{
"presets": [
["@babel/preset-env"]
]
}
配置loader
module: {
rules: [{ test: /\.js$/, use: "babel-loader" }]
},
现在打包已经可以成功的将es6
语法转化成es5
语法!
1.2 解析装饰器
npm i @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators --save-dev
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties",{"loose":true}]
]
legacy:true
表示继续使用装饰器,loose为false时会采用Object.defineProperty
定义属性
- Plugin会运行在Preset之前
- Plugin 会从第一个开始顺序执行,Preset则是相反的
1.3 polyfill
根据.browserslistrc
文件,转化使用到的浏览器api
"presets": [
["@babel/preset-env",{
"useBuiltIns":"usage", // 按需加载
"corejs":2 // corejs 替代了以前的pollyfill
}]
]
安装corejs
npm install core-js@2 --save
使用
transform-runtime
A plugin that enables the re-use of Babel’s injected helper code to save on codesize.可以帮我们节省代码。
npm install --save-dev @babel/plugin-transform-runtime @babel/runtime
在.babelrc
中配置插件
"plugins": [
"@babel/plugin-transform-runtime"
]
1.4 添加eslint
安装eslint
npm install eslint
npx eslint --init # 初始化配置文件
{
test:/\.js/,
enforce:'pre',
use:'eslint-loader'
},
配置
eslint-loader
可以实时校验js文件的正确性,pre
表示在所有loader
执行前执行
2.source-map
- eval:生成代码 每个模块都被eval执行,每一个打包后的模块后面都增加了包含sourceURL
- source-map:产生map文件
- inline:不会生成独立的 .map文件,会以dataURL形式插入
- cheap:忽略打包后的列信息,不使用loader中的sourcemap
- module:没有列信息,使用loader中的sourcemap(没有列信息)
devtool:isDev?'cheap-module-eval-source-map':false
每个库中采用的
sourcemap
方式不一,可以根据自己的需要自行配置
3.resolve解析
想实现使用require或是import的时候,可以尝试自动添加扩展名进行匹配
resolve: {
extensions: [".js", ".jsx", ".json", ".css", ".ts", ".tsx", ".vue"]
},
4.拷贝静态文件
有时候在打包时希望将一些静态资源文件进行拷贝,可以使用copy-webpack-plugin
插件
安装插件
npm i copy-webpack-plugin --save-dev
使用拷贝插件
const CopyWebpackPlugin = require('copy-webpack-plugin');
new CopyWebpackPlugin([
{from:path.resolve('./src/static'),to:path.resolve('./dist')},
])