UNPKG

dn-middleware-webpack5

Version:

--- group: middleware name: webpack5 title: Webpack5 ---

314 lines (214 loc) 7.47 kB
--- group: middleware name: webpack5 title: Webpack5 --- # dn-middleware-webpack5 ## Features 1. 新版本的中间件采用 ts 进行了完全的代码重写和设计上的改造 2. wepack5 新特性支持: 1. target 允许传递一个目标列表,并且支持目标的版本。例如 target: "node14"``target: ["web", "es2020"]。 2. 模块联邦:这是一个颠覆性的feature,远程的模块可以独立编译,然后在运行时进行加载,同时还能够定义公共库来避免重复加载。 3. 构建优化:optimization中的各种属性的更新和新增,例如 optimization.innerGraph 可以对模块中的标志进行分析,找出导出和引用之间的依赖关系。生产模式下是默认启用的。 4. 同时API支持了更多可扩展配置 3. 更加智能,自动生成很多默认值,比如文件入口、是否启用ts编译等 4. 除了新功能,还有很多使用上的优化 1. 新增了长期缓存的算法,这些算法在生产模式下是默认启用的,建议不要设置,使用默认值更合适。optimization.chunkIds和optimization.moduleIds 2. 统一使用内容哈希,[contenthash],在只修改注释时优化长期缓存 3. 删除output.jsonpFunction,自动使用 package.json 中有唯一的名称来防止多个 webpack 运行时的冲突 4. 支持 Fast Refresh,替换了 HMR,支持 React Hooks 级别的热更新了,具体可往下看(由于兼容性暂时关闭,问题开发者已修复20201102) 5. 其他构建优化 6. 其他性能优化(btw.并不是所有 optimization 配置项都开启就是优化性能,有的只适用于小型项目,大型项目中反而起反作用) ## 示例 ```yml dev: - name: webpack5 watch: true - name: server - name: browser-sync build: - name: webpack5 env: "production" ``` ## 旧版本升级指南 1. 删除原有包,以更新 package.lock.json:`npm uninstall dn-middleware-webpack -D && npm i dn-middleware-webpack5 -D` 2. 修改 pipe.yml 中间件配置为webpack5 3. 可选:常用多余配置移除 1. 在 development 环境下,会默认帮你配置 1. watch:监听文件变化,默认 true 打开 2. injectCSS:注入 css,默认 true 打开 3. hot:热更新,默认打开 4. devtool / sourceMap:默认为 "source-map" 2. 在 production 环境下,会默认帮你设置 1. compress:压缩,默认打开 2. devtool / sourceMap:默认为 false 3. 文件目录相关默认值 1. entry 为 "src/index.tsx", "src/index.ts", "src/index.jsx", "src/index.js"时 2. template 为 "public/index.html", "src/assets/index.html" 时 3. output 为 "/build" 时 4. 会自动根据目录中有无 ts 文件来决定要不要打开 ts 编译 ## 配置项属性(基础配置类) ### `env` 类型:`"development" | "production"`<br> 默认值:`"development"` 运行环境,开发环境development,生产环境production ### `entry` 类型:`string | object`<br> 默认值:`"src/index"`<br> 示例: ```js entry: src/test.tsx ``` ```js entry: (1): src/**.tsx ``` ```js entry: x: src/index.tsx y: src/test.tsx ``` 入口起点 ### `output` 类型:`string | object`<br> 默认值:`"/build"` 输出文件的相对路径 ### `output.path``output` ### `output.library` 类型:`object`<br> 默认值:`{}` 参考:[library]("https://webpack.docschina.org/configuration/output/#outputlibrary") ### `output.chunkFileName``output` 默认值:`"[name].[chunkhash:8].chunk.js"` 默认异步chunk为这个路径,可根据vm中升级前的路径灵活变更 ### `template` 类型:`string | Array<{ name: string; file: string }>`<br> 默认值:`"public/index.html"``"src/assets/index.html"` html模板入口 ### `publicPath` 类型:`string`<br> 默认值:`/` 异步资源默认前缀,如cdn地址 ### `devtool` | `sourceMap(v4)` 类型:`boolean | string`<br> 默认值:`false` 控制是否生成,以及如何生成 source map ### `target` 类型:`"browser"| "node" | "webworker"`<br> 默认值:`"browser"` 编译环境 ### `alias` 类型:`object`<br> 默认值:`{}` 别名 ## 配置项属性(进阶基础配置) ### `jsxRuntime` 类型:`"automatic" | "classic"`<br> 透传给 `dn-middleware-babel``jsxRuntime` 配置项,详细说明请查看[相关文档](https://www.npmjs.com/package/dn-middleware-babel#jsxruntime) ### `injectCSS` 类型:`boolean`<br> 默认值:`true` 是否引入css ### `cssModules` 类型:`boolean`<br> 默认值:`false` 是否使用 css Modules ### `disabledTypeCheck` 类型:`boolean`<br> 默认值:`false` 是否阻止 ts 类型检查 ### `tscCompileOnError` 类型:`boolean`<br> 默认值:`true` ts类型检查中的错误是否会阻断编译 ### `folders` 类型: ```js { js?: string; css?: string; media?: string; html?: string; } ``` 默认值:`{}` 指定资源子目录名称,主要包括css,js,字体和图片和html的目录,不指定的话会直接输出到output目录下 ### `moduleFederation` 类型:object<br> 模块联邦相关配置 ### `js` ## 配置项属性(构建优化类) ### `compress` 类型:`boolean`<br> 默认值:开发环境默认 `false`,生产环境默认 `true` 是否启用压缩(如果使用了compress中间件,需要将此配置设置为 false) ### `terser.terserOptions` 类型: `object`<br> 默认值: {} ### `esbuild.minify` 类型:`boolean | object`<br> 默认值:`false` 是否启用 `esbuild` 的构建产物压缩能力,代替 `TerserPlugin`,类型为 object 时透传给 ESBuildMinifyPlugin 作为选项 ### `esbuild.loader` 类型:`boolean | object`<br> 默认值:`false` 【暂不支持】是否启用 `esbuild` 的构建能力,代替 `babel-loader`,类型为 object 时作为 esbuild-loader 的选项 ### `watch` 类型:`boolean`<br> 默认值:开发环境默认 `true`,生产环境默认 `false` 是否开启监听模式 ### `externals` 类型:`object`<br> 默认值:`{}` 打包排除的依赖配置项 ### `external(v4)` 类型:`boolean`<br> 默认值:`false` 是否要打包排除依赖 ### `hot` 类型:`boolean`<br> 默认值:开发环境默认为 true 是否开启 react-refresh(类似于 HMR) ### `common.disabled(v4)` 类型:`boolean`<br> 默认值:`false` 禁用抽取公共部分 ### `common.name(v4)` 类型:`string`<br> 默认值:`common` 生成的公共资源名称 ## 配置项属性(性能优化类) ### `htmlMinifier` 类型:`boolean`<br> 默认值:`true` 是否压缩html ### `performance` 类型:`boolean |"warning" | "error"`<br> 默认值:`false` 是否开启性能提示及形式 ### `optimization` 类型: ```js { minimize?: Boolean; minimizer?: any; splitChunks?: object; innerGraph?: boolean; } ``` 默认值:`false` 优化配置项 ### `cache` 类型:`object`<br> 默认值:`{ type: "filesystem" }` 缓存相关的配置项,参考:[官方文档]("https://webpack.js.org/configuration/other-options/#cache")了解相关配置项 ## 配置项属性(分析工具类) ### `analysis` 类型:`boolean | object`<br> 默认值:`false` 是否启用分析工具`BundleAnalyzerPlugin`,以及相关配置项,如是否为其开启server ### `statsOpts` 类型:`object`<br> 定制 stats 输出项内容