关于生产环境的优化 有两种方法
1.在配置文件中判断环境(适用于小型项目)(webpack.config.js)
2.一个环境对一个配置文件(适用于大项目 因为大项目的环境需要配置的比较多)(webpack.prod.js,webpack.common.js,webpack.dev.js)
第一种在 配置环境中判断环境用if来判读当前环境
普通环境命令:yarn webpack
开发环境命令:yarn webpack —env production 在命令行指定当前模式 module.exports 中的 env接收。
const path = require('path') // path 模块是node自带的 可自行查看const { CleanWebpackPlugin } = require('clean-webpack-plugin')const HtmlWebpackPlugin = require('html-webpack-plugin')const CopyWebpackPlugin = require('copy-webpack-plugin')module.exports =(env,argv )=> {// 普通配置 不属于开发配置let confing = {mode:'none',entry:'./src/index.js',output:{filename:'bundle.js',path:path.join(__dirname,'dist'),},devtool:"source-map",//devtool有12种类型值devServer:{// 开发阶段访问静态资源文件contentBase:'./public' // 也可接受一个数组['./public']},module:{//模块rules:[ // rules:[] 是模块的规则加载器 webpack 提供了很多关于 loader插件{ // yarn add babel-loader @babel/core @babel/preset-env --devtest:/\.js$/,use:{loader:'babel-loader',options:{presets:['@babel/preset-env'] //@babel/preset-env 包含了es6的所有新特性}}},{test:/\.css$/, // 以css结尾的文件用use中指定的loader// css-loader: 将文件安装css来执行 style-loader:将css文件用style标签追加到页面上use:['style-loader','css-loader'] // 注意:use如果有多个loader它的执行顺序是从后往前执行 也就是先执行css-loader}, // 每一个对象就是一个模块加载器]},plugins:[ // 插件new HtmlWebpackPlugin({ // 一个HtmlWebpackPlugin生产一个html页面title:'webpack html plugin',meta:{viewport:'width=device-width'},template:'./src/index.html'}), //自动生成html]}// 在配置文件中判断环境(适用于小型项目)// env:命令行输入的环境名称//argv:命令行中传递的所有参数// production 生产环境5if(env.production){confing.mode = "production"; // 告诉webpack 这是生产环境confing.devtool = false; //控制sourceMap 不开启confing.plugins = [...confing.plugins,new CleanWebpackPlugin(),new CopyWebpackPlugin({ //文件copy 从public 复制到dist下 to:"值为dist下的文件夹"patterns: [{ from: "public", to: "dest" }]})] //cleanwebpackplugin 和copywebpackplugn两个插件只有在打包上传时候才会用到。}return confing}
第二种,不同环境不同js。 这里只写部分其他逻辑一样 。开发环境的js
wabpack.common.js 就是普通的模式
const path = require('path') // path 模块是node自带的 可自行查看//commen公共文件const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports ={mode:'none',entry:'./src/index.js',// 需要打包的文件路径output:{filename:'bundle.js',path:path.join(__dirname,'dist'),},devtool:"source-map",//devtool有12种类型值devServer:{// 开发阶段访问静态资源文件contentBase:'./public', // 也可接受一个数组['./public']},module:{//模块rules:[ // rules:[] 是模块的规则加载器 webpack 提供了很多关于 loader插件{ // yarn add babel-loader @babel/core @babel/preset-env --devtest:/\.js$/,use:{loader:'babel-loader',options:{presets:['@babel/preset-env'] //@babel/preset-env 包含了es6的所有新特性}}},{test:/\.css$/, // 以css结尾的文件用use中指定的loader// css-loader: 将文件安装css来执行 style-loader:将css文件用style标签追加到页面上use:['style-loader','css-loader'] // 注意:use如果有多个loader它的执行顺序是从后往前执行 也就是先执行css-loader}]},plugins:[ // 插件new HtmlWebpackPlugin({ // 一个HtmlWebpackPlugin生产一个html页面title:'webpack html plugin',meta:{viewport:'width=device-width'},template:'./src/index.html'}) //自动生成html]}
webpack.prod.js
const comment = require('./webpack.common')const { merge } = require('webpack-merge')// 安装命令:yarn add webpack-merge --devconst { CleanWebpackPlugin } = require('clean-webpack-plugin')const CopyWebpackPlugin = require('copy-webpack-plugin')// Object.assign() 对象合并但数组无法追加所以使用 webpack 提供的 merge 对象,数组合并 webpack 内部会自行处理// 就是将普通模式的参数替换为开发模式的module.exports = merge(comment, {mode:'production',plugins:[new CleanWebpackPlugin(),new CopyWebpackPlugin({patterns: [{ from: "public", to: "dest" }]})]})
运行命令:yarn webpack —config webpack.prod.js
如果感觉这样写容易出错可以在 package.json 文件中写入。然后运行命令为 yarn build
"scripts": {"build": "webpack --config webpack.prod.js"},

