飞道的博客

webpack配置 - 生产环境

212人阅读  评论(0)

开发环境的配置可以看另外一个篇文章,这篇写的是生产环境的配置

提取css成单独文件

由于css最后是打包到js中,会造成js体积过大,所以要单独提取出来

依赖:npm install mini-css-extract-plugin -D

需要配置plugins 和loader

loader 配置:因为style-loader是创建style标签将样式插入,所以要单独提取css出来的话,就要关闭style-loader 使用 MiniCssExtractPlugin.loader

MiniCssExtractPlugin.loader 这个取代style-loader,作用是:提取js中的css成单独文件

plugins配置: new MiniCssExtractPlugin( filename: 'css/built.css' ) ,filename对输出的css文件进行重命名和路径输出

 

css兼容性处理

依赖:npm i postcss-loader postcss-preset-env -D

使用 postcss-loader 的配置:options:{ ident:'postcss', plugins: () => [ require('postcss-preset-env')() ]}

使用postcss-preset-env 插件的作用:帮postcss 找到package.json中的brownslist里面的配置,通过配置加载指定的css兼容性样式

默认使用loader的写法:"postcss-loader",需要修改loader配置的写法:{ loader:"postcss-loader" , option: {...} }


  
  1. "brownslist" :[
  2. ">0.2%",
  3. "not dead",
  4. "not op_mini all"
  5. "last 1 version"
  6. ]

压缩css

依赖:npm i optimize-css-assets-webpack-plugin -D

需要配置plugins,new OptimizeCssAssetsWebpackPlugin()

 

eslint语法检查

依赖:npm i eslint eslint-loader eslint-config-airbnb-base eslint-plugin-import -D

需要配置loader

eslint-config-airbnb-base 是 权威的js语法检查规则,它依赖 eslint-plugin-import

注意:只检查自己的代码,第三方库不需要检查,exclude: /node_modules/

设置检查规则:在packjson中的eslintConfig中设置,"eslintConfig": {"extends": "airbnb-base"}

使用eslint-loader配置自动修复eslint的错误: options:{ fix: true }

 

js的兼容性处理

依赖:npm i babel-loader @babel/core -D

需要配置loader

1.基本的js兼容性处理:安装 @babel/preset-env ,问题:只能转化基本语法,如果promise高级语法不能转换

2.全部的js兼容处理:安装 @babel/polyfill ,在main.js 直接导入,打包后体检太大了

3.按需兼容性处理:安装 @core-js

 

js和html压缩

js压缩:生产环境下会自动压缩js代码,设置 mode:"production"

html压缩:在new HtmlWebpackPlugin( { minify: : {...} } ) ,在minify 写上压缩配置

 

生产环境的基本配置

要先执行eslint(语法检查)在执行babel(将es6转成es5),设置enforce: "pre" 优先执行


  
  1. const path = require( 'path')
  2. const HtmlWebpackPlugin = require( 'html-webpack-plugin')
  3. const MiniCssExtractPlugin = require( 'mini-css-extract-plugin')
  4. const OptimizeCssAssetsWebpackPlugin = require( 'optimize-css-assets-webpack-plugin')
  5. module. exports = {
  6. entry: "./src/index.js",
  7. output: {
  8. filename: "bundle.js",
  9. path: path.resolve(_dirname, 'build')
  10. },
  11. mode: 'production',
  12. module:{
  13. rules:[
  14. // eslint检查
  15. {
  16. test: /\.js$/,
  17. exclude: /node_modules/,
  18. loader: "eslint-loader",
  19. enforce: "pre",
  20. options: {
  21. fix: true // 自动修复eslint的错误
  22. }
  23. },
  24. // js兼容性处理
  25. {
  26. test: /\.js$/,
  27. exclude: /node_modules/,
  28. loader: "babel-loader",
  29. options: {
  30. presets:[
  31. '@babel/preset-env',
  32. {
  33. useBuiltIns: 'usage', // 按需加载
  34. corejs:{
  35. version: 3 // 指定core-js的版本
  36. },
  37. targets: { // 指定兼容和性做到哪个版本的浏览器
  38. chrome : '60',
  39. firefox: '60',
  40. ie: '9',
  41. safari: '10',
  42. edge: '17'
  43. }
  44. }
  45. ]
  46. }
  47. },
  48. // css 提取和兼容性处理
  49. {
  50. test: /\.css$/,
  51. use:[
  52. MiniCssExtractPlugin.loader, //如果需要用这个loader,就需要关闭 style-loader
  53. "css-loader", // 将css文件转换为js
  54. {
  55. loader: 'postcss-loader',
  56. options:{
  57. ident: 'postcss',
  58. plugins: ()=>[
  59. require( 'postcss-preset-env')() // postcss的插件
  60. ]
  61. }
  62. }
  63. ]
  64. },
  65. // 匹配less文件
  66. {
  67. test: /\.less$/,
  68. use:[
  69. MiniCssExtractPlugin.loader,
  70. "css-loader",
  71. "less-loader"
  72. {
  73. loader: 'postcss-loader',
  74. options:{
  75. ident: 'postcss',
  76. plugins: ()=>[
  77. require( 'postcss-preset-env')()
  78. ]
  79. }
  80. }
  81. ]
  82. },
  83. // 匹配图片文件
  84. {
  85. test: /\.(jpg|png|gif)$/,
  86. loader: 'url-loader',
  87. options: {
  88. limit: 8* 1024,
  89. esModule: false,
  90. name: '[hash:10].[ext]'
  91. }
  92. },
  93. // 匹配html使用img
  94. {
  95. test: /\.html$/,
  96. loader: 'html-loader'
  97. },
  98. {
  99. exclude: /\.(html|css|js)$/,
  100. loader: 'file-loader',
  101. outputPath: '文件名'
  102. }
  103. ]
  104. },
  105. plugins:[
  106. // js和html整合插件
  107. new HtmlWebpackPlugin({
  108. template: "./src/index.html",
  109. minify: {
  110. collapseWhitespace: true, // 移除空格
  111. removeComments: true // 移除注释
  112. }
  113. }),
  114. //css 提取插件
  115. new MiniCssExtractPlugin({
  116. filename: 'css/built.css' // 对输出的css文件进行重命名和路径输出
  117. }),
  118. // css 压缩插件
  119. new OptimizeCssAssetsWebpackPlugin()
  120. ]
  121. }

 


转载:https://blog.csdn.net/zhenzhenzhen1705/article/details/116717547
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场