[关闭]
@Dale-Lin 2022-08-04T20:37:38.000000Z 字数 2058 阅读 257

entry

webpack5


webpack 的运行逻辑是从 entry 指定的入口文件开始,递归加载、构建项目资源。

entry 支持以下类型字段:

例如对象类型:

  1. module.exports = {
  2. // ...
  3. entry: {
  4. // string
  5. home: './home.js',
  6. // array
  7. shared: ['react', 'react-dom', 'redux', 'react-redux'],
  8. // object
  9. personal: {
  10. import: './person.js',
  11. filename: 'pages/personal.js',
  12. dependOn: 'shared',
  13. chunkLoading: 'jsonp',
  14. asyncChunks: true
  15. },
  16. // function
  17. admin: function() {
  18. return './admin.js';
  19. }
  20. }
  21. }

对象类型配置中最为复杂,支持以下属性:

chunk 依赖管理

使用 entry.dependOn 声明入口依赖 bundle

dependOn 属性声明前置 bundle 依赖,能够减少重复代码构建,优化构建产物质量:

  1. const path = require("path");
  2. module.exports = {
  3. mode: "development",
  4. devtool: false,
  5. entry: {
  6. main: "./src/index.js",
  7. foo: {
  8. import: "./src/foo.js",
  9. // 避免重复 bundle 代码
  10. dependOn: "main"
  11. },
  12. },
  13. output: {
  14. clean: true,
  15. filename: "[name].js",
  16. path: path.resolve(__dirname, "dist"),
  17. },
  18. }

foo entry 声明了 dependOnmain entry 的构建产物,webpck 会认为 client 在加载 foo 的 bundle 之前必然会加载 main,因此可以将重复的模块代码、webpack 运行时代码都放到 main 的 bundle 中,减少不必要的重复;

dependOn 适用于有明确入口依赖的场景,例如主框架 bundle 包含了项目的基本框架(例如 React),还另外对每个页面单独构建了 bundle(不需要独立运行),此时可以用 dependOn 属性优化产物内容。

使用 entry.runtime 管理 webpack 的运行时代码

为了支持 bundle 代码在各种环境下运行,webpack 会在产物中注入一系列运行时代码,取决于我们用到了多少特性,例如:

runtime 声明把当前 entry 的 bundle 的运行时代码抽成单独的一个 chunk,多个 entry 声明同样的 entry 可以把两个入口的运行时代码抽到同一个单独的 chunk 里:

  1. const path = require("path");
  2. module.exports = {
  3. mode: "development",
  4. devtool: false,
  5. entry: {
  6. main: { import: "./src/index.js", runtime: "common-runtime" },
  7. foo: { import: "./src/foo.js", runtime: "common-runtime" },
  8. },
  9. output: {
  10. clean: true,
  11. filename: "[name].js",
  12. path: path.resolve(__dirname, "dist"),
  13. },
  14. };

这里把 main 和 foo entry 的运行时代码都抽到 common-runtime 文件里。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注