模式 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
<a name="B8la2"></a>## 入口 Entry- 配置打包的入口文件<a name="jmEe2"></a>## 出口 Output- 配置打包的文件路径和文件名<a name="tJGxB"></a>## Loader- 用来转换某些类型的模块,就是将webpack不认识的模板转成认识的内容- 单一原则,每个loader只做某一件事- loader是从右向左执行,最右侧的loader接收源文件,最左侧的loader返回一个JS文件<a name="brvrN"></a>### postcss-loader- 用来处理css兼容性,给css样式加一些不同浏览器的前缀<a name="ZAEZx"></a>### babel-loader- 用来转换JS新的语法代码,使用 Babel 加载 ES2015+ 代码并将其转换为 ES5- @babel/core Babel编译的核心包- @babel/preset-env Babel编译的预设,可以理解为 Babel 插件的超集<a name="qDVG7"></a>### catch-loader- 用来缓存开销较大的loader的处理结果,缓存位置node_modules/.cache/cache-loader<a name="ByII1"></a>## Plugin- 插件可以执行范围更广的任务- 贯穿整个webpack打包的生命周期,执行不同的任务<a name="H43Cy"></a>### mini-css-extract-plugin- 用来分离CSS文件,开发环境是用过style-loader来动态插入到html中,开发环境则打包生成出对应的CSS文件<a name="MiBxU"></a>## Resolve- extensions: 指定要加载的模块的扩展名,尽可能把常用的往前放置,会优先查找- alias: 配置别名- modules: 指定去哪个目录中查找对应的模块,告诉webpack优先查找指定文件- mainFields: package.json中的main字段- 如果target是web或者是webworker的话,默认值是'browser', 'module', 'main'- 如果target是其他值的时候,默认是是'module', 'main'- target在output中配置<a name="Igco3"></a>## webpack.config.js```javascriptconst path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// 模块mode: 'development',// 入口文件entry: './src/index.js',// 出口文件output: {path: path.resolve(__dirname, 'dist'),filename: 'main.js'},// 本地服务devServer: {compress: true, // 是否开启压缩port: 9000,open: true,},// 模块,配置loadermodule: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']},{test: /\.js$/,use: [{loader: 'babel-loader',options: [presets: ['@babel/preset-env'],cacheDirectory: true]}]}]},// 插件plugins: [new HtmlWebpackPlugin({template: './src/index.html'})]}
