关于生产环境的优化 有两种方法

1.在配置文件中判断环境(适用于小型项目)(webpack.config.js)

2.一个环境对一个配置文件(适用于大项目 因为大项目的环境需要配置的比较多)(webpack.prod.js,webpack.common.js,webpack.dev.js)

第一种在 配置环境中判断环境用if来判读当前环境

普通环境命令:yarn webpack

开发环境命令:yarn webpack —env production 在命令行指定当前模式 module.exports 中的 env接收。

  1. const path = require('path') // path 模块是node自带的 可自行查看
  2. const { CleanWebpackPlugin } = require('clean-webpack-plugin')
  3. const HtmlWebpackPlugin = require('html-webpack-plugin')
  4. const CopyWebpackPlugin = require('copy-webpack-plugin')
  5. module.exports =(env,argv )=> {
  6. // 普通配置 不属于开发配置
  7. let confing = {
  8. mode:'none',
  9. entry:'./src/index.js',
  10. output:{
  11. filename:'bundle.js',
  12. path:path.join(__dirname,'dist'),
  13. },
  14. devtool:"source-map",//devtool有12种类型值
  15. devServer:{// 开发阶段访问静态资源文件
  16. contentBase:'./public' // 也可接受一个数组['./public']
  17. },
  18. module:{//模块
  19. rules:[ // rules:[] 是模块的规则加载器 webpack 提供了很多关于 loader插件
  20. { // yarn add babel-loader @babel/core @babel/preset-env --dev
  21. test:/\.js$/,
  22. use:{
  23. loader:'babel-loader',
  24. options:{
  25. presets:['@babel/preset-env'] //@babel/preset-env 包含了es6的所有新特性
  26. }
  27. }
  28. },
  29. {
  30. test:/\.css$/, // 以css结尾的文件用use中指定的loader
  31. // css-loader: 将文件安装css来执行 style-loader:将css文件用style标签追加到页面上
  32. use:['style-loader','css-loader'] // 注意:use如果有多个loader它的执行顺序是从后往前执行 也就是先执行css-loader
  33. }, // 每一个对象就是一个模块加载器
  34. ]
  35. },
  36. plugins:[ // 插件
  37. new HtmlWebpackPlugin({ // 一个HtmlWebpackPlugin生产一个html页面
  38. title:'webpack html plugin',
  39. meta:{
  40. viewport:'width=device-width'
  41. },
  42. template:'./src/index.html'
  43. }), //自动生成html
  44. ]
  45. }
  46. // 在配置文件中判断环境(适用于小型项目)
  47. // env:命令行输入的环境名称
  48. //argv:命令行中传递的所有参数
  49. // production 生产环境5
  50. if(env.production){
  51. confing.mode = "production"; // 告诉webpack 这是生产环境
  52. confing.devtool = false; //控制sourceMap 不开启
  53. confing.plugins = [
  54. ...confing.plugins,
  55. new CleanWebpackPlugin(),
  56. new CopyWebpackPlugin({ //文件copy 从public 复制到dist下 to:"值为dist下的文件夹"
  57. patterns: [
  58. { from: "public", to: "dest" }
  59. ]
  60. })
  61. ] //cleanwebpackplugin 和copywebpackplugn两个插件只有在打包上传时候才会用到。
  62. }
  63. return confing
  64. }

第二种,不同环境不同js。 这里只写部分其他逻辑一样 。开发环境的js

wabpack.common.js 就是普通的模式

  1. const path = require('path') // path 模块是node自带的 可自行查看
  2. //commen公共文件
  3. const HtmlWebpackPlugin = require('html-webpack-plugin')
  4. module.exports ={
  5. mode:'none',
  6. entry:'./src/index.js',// 需要打包的文件路径
  7. output:{
  8. filename:'bundle.js',
  9. path:path.join(__dirname,'dist'),
  10. },
  11. devtool:"source-map",//devtool有12种类型值
  12. devServer:{// 开发阶段访问静态资源文件
  13. contentBase:'./public', // 也可接受一个数组['./public']
  14. },
  15. module:{//模块
  16. rules:[ // rules:[] 是模块的规则加载器 webpack 提供了很多关于 loader插件
  17. { // yarn add babel-loader @babel/core @babel/preset-env --dev
  18. test:/\.js$/,
  19. use:{
  20. loader:'babel-loader',
  21. options:{
  22. presets:['@babel/preset-env'] //@babel/preset-env 包含了es6的所有新特性
  23. }
  24. }
  25. },
  26. {
  27. test:/\.css$/, // 以css结尾的文件用use中指定的loader
  28. // css-loader: 将文件安装css来执行 style-loader:将css文件用style标签追加到页面上
  29. use:['style-loader','css-loader'] // 注意:use如果有多个loader它的执行顺序是从后往前执行 也就是先执行css-loader
  30. }
  31. ]
  32. },
  33. plugins:[ // 插件
  34. new HtmlWebpackPlugin({ // 一个HtmlWebpackPlugin生产一个html页面
  35. title:'webpack html plugin',
  36. meta:{
  37. viewport:'width=device-width'
  38. },
  39. template:'./src/index.html'
  40. }) //自动生成html
  41. ]
  42. }

webpack.prod.js

  1. const comment = require('./webpack.common')
  2. const { merge } = require('webpack-merge')// 安装命令:yarn add webpack-merge --dev
  3. const { CleanWebpackPlugin } = require('clean-webpack-plugin')
  4. const CopyWebpackPlugin = require('copy-webpack-plugin')
  5. // Object.assign() 对象合并但数组无法追加所以使用 webpack 提供的 merge 对象,数组合并 webpack 内部会自行处理
  6. // 就是将普通模式的参数替换为开发模式的
  7. module.exports = merge(comment, {
  8. mode:'production',
  9. plugins:[
  10. new CleanWebpackPlugin(),
  11. new CopyWebpackPlugin({
  12. patterns: [
  13. { from: "public", to: "dest" }
  14. ]
  15. })
  16. ]
  17. })

运行命令:yarn webpack —config webpack.prod.js

如果感觉这样写容易出错可以在 package.json 文件中写入。然后运行命令为 yarn build

  1. "scripts": {
  2. "build": "webpack --config webpack.prod.js"
  3. },

prod.png