module.exports = {entry: {}, // 入口文件output: {}, // 出口文件module: {rules: [{test: /\.css$/i,use: [// 在 head 中创建 style 标签'style-loader',// 将 CSS 转化成 CommonJS 模块'css-loader']},{test: /\.s[ac]ss$/i,use: [// 在 head 中创建 style 标签'style-loader',//// 抽离 css 为独立文件MiniCssExtractPlugin.loader,// 将 CSS 转化成 CommonJS 模块'css-loader',{loader: 'postcss-loader',options: {postcssOptions: {plugins: [['postcss-preset-env',{// 其他选项},],],},},},// 将 Sass 编译成 CSS'sass-loader',],},{test: /\.s[ac]ss$/i,use: [// 抽离 css 为独立文件MiniCssExtractPlugin.loader,// 将 CSS 转化成 CommonJS 模块'css-loader',// 将 Sass 编译成 CSS'sass-loader',],},{test: /\.js$/,exclude: /node_modules/, // 排除node_modulesuse: {loader: 'babel-loader',options: {// 配置预设presets: ['@babel/preset-env'],plugins: [['@babel/plugin-transform-runtime'] // 转换async await语法]}}}]},plugins: [new MiniCssExtractPlugin({// 对输出结果重命名filename: 'assets/css/[name].css'})],optimization: {splitChunks: {// 缓存第三方库cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}},minimizer: [// 压缩 CSS 代码,仅在生产模式下有效new CssMinimizerPlugin()],},externals: {}};
JS高级语法处理
babel-loader
- babel-loader: webpack 应用babel 解析ES6的的桥梁,本身自己并不将 ES6转ES5
- @babel/core:babel核心代码,当webpack使用babel-loader处理文档时,babel-loader实际上调用了babel-core的api
@babel/preset-env:babel预设,根据环境仅仅转译环境不支持的语法,而不知全部转换为es5
npm i babel-loader @babel/core @babel/preset-env -D
regeneratorRuntime
regeneratorRuntime 是 webpack 打包生成的全局辅助函数,由 babel 生成,用于兼容 async/await 的语法。
npm i @babel/runtime @babel/plugin-transform-runtime -D
CSS处理
抽离 CSS 代码为独立文件
npm i mini-css-extract-plugin -D
CSS 代码压缩(生产模式)
npm i css-minimizer-webpack-plugin -D
CSS 兼容性处理
npm i postcss-loader postcss postcss-preset-env -D
在根目录下创建 postcss.config.js 文件并进行配置
module.exports = {plugins: [['postcss-preset-env',{// 其他选项},],],};
Externals
module.exports = {//...externals: {react: 'react',},// 或者externals: {lodash: {commonjs: 'lodash',amd: 'lodash',root: '_', // 指向全局变量},},// 或者externals: {subtract: {root: ['math', 'subtract'],},},};
此语法用于描述外部 library 所有可用的访问方式。这里 lodash 这个外部 library 可以在 AMD 和 CommonJS 模块系统中通过 lodash 访问,但在全局变量形式下用 _ 访问。subtract 可以通过全局 math 对象下的属性 subtract 访问(例如 window[‘math’][‘subtract’])。
resolve解析
module.exports = {//...resolve: {enforceExtension: false,// 能够使用户在引入模块时不带扩展: import File from '../path/to/file';extensions: ['.js', '.json', '.wasm'],alias: {xyz$: path.resolve(__dirname, 'path/to/file.js'),},},};
