模式 Mode

  • development 开发环境
  • production 生成环境
  • 可以在命令行中配置 —mode=development 来设置模式,如果配置文件中和命令行中都设置了,采用命令行中的
  • —mode和配置文件中的mode配置 只会在模块中的能获取到,在Node环境中是undefined
  • —env 可以通过配置文件的参数中获取,node环境和模块内拿不到
  • cross-env NODE_ENV=development webpack, cross-env抹平不同系统的设置环境变量的差异 ```javascript mode = development

./src/index.js => 模块 console.log(process.env.NODE_ENV) // development

webpack.config.js => node环境脚本 console.log(process.env.NODE_ENV) // undefined

  1. <a name="B8la2"></a>
  2. ## 入口 Entry
  3. - 配置打包的入口文件
  4. <a name="jmEe2"></a>
  5. ## 出口 Output
  6. - 配置打包的文件路径和文件名
  7. <a name="tJGxB"></a>
  8. ## Loader
  9. - 用来转换某些类型的模块,就是将webpack不认识的模板转成认识的内容
  10. - 单一原则,每个loader只做某一件事
  11. - loader是从右向左执行,最右侧的loader接收源文件,最左侧的loader返回一个JS文件
  12. <a name="brvrN"></a>
  13. ### postcss-loader
  14. - 用来处理css兼容性,给css样式加一些不同浏览器的前缀
  15. <a name="ZAEZx"></a>
  16. ### babel-loader
  17. - 用来转换JS新的语法代码,使用 Babel 加载 ES2015+ 代码并将其转换为 ES5
  18. - @babel/core Babel编译的核心包
  19. - @babel/preset-env Babel编译的预设,可以理解为 Babel 插件的超集
  20. <a name="qDVG7"></a>
  21. ### catch-loader
  22. - 用来缓存开销较大的loader的处理结果,缓存位置node_modules/.cache/cache-loader
  23. <a name="ByII1"></a>
  24. ## Plugin
  25. - 插件可以执行范围更广的任务
  26. - 贯穿整个webpack打包的生命周期,执行不同的任务
  27. <a name="H43Cy"></a>
  28. ### mini-css-extract-plugin
  29. - 用来分离CSS文件,开发环境是用过style-loader来动态插入到html中,开发环境则打包生成出对应的CSS文件
  30. <a name="MiBxU"></a>
  31. ## Resolve
  32. - extensions: 指定要加载的模块的扩展名,尽可能把常用的往前放置,会优先查找
  33. - alias: 配置别名
  34. - modules: 指定去哪个目录中查找对应的模块,告诉webpack优先查找指定文件
  35. - mainFields: package.json中的main字段
  36. - 如果target是web或者是webworker的话,默认值是'browser', 'module', 'main'
  37. - 如果target是其他值的时候,默认是是'module', 'main'
  38. - target在output中配置
  39. <a name="Igco3"></a>
  40. ## webpack.config.js
  41. ```javascript
  42. const path = require('path');
  43. const HtmlWebpackPlugin = require('html-webpack-plugin')
  44. module.exports = {
  45. // 模块
  46. mode: 'development',
  47. // 入口文件
  48. entry: './src/index.js',
  49. // 出口文件
  50. output: {
  51. path: path.resolve(__dirname, 'dist'),
  52. filename: 'main.js'
  53. },
  54. // 本地服务
  55. devServer: {
  56. compress: true, // 是否开启压缩
  57. port: 9000,
  58. open: true,
  59. },
  60. // 模块,配置loader
  61. module: {
  62. rules: [
  63. {
  64. test: /\.css$/,
  65. use: ['style-loader', 'css-loader']
  66. },
  67. {
  68. test: /\.js$/,
  69. use: [
  70. {
  71. loader: 'babel-loader',
  72. options: [
  73. presets: ['@babel/preset-env'],
  74. cacheDirectory: true
  75. ]
  76. }
  77. ]
  78. }
  79. ]
  80. },
  81. // 插件
  82. plugins: [
  83. new HtmlWebpackPlugin({
  84. template: './src/index.html'
  85. })
  86. ]
  87. }