# 脚本分发

可以将只有分包使用的javascript/typescript,移动到相应的分包内。

# 如何使用

安装

pnpm add @plugin-light/webpack-plugin-dispatch-script -D

vue.config.js 中添加如下设置:

const { DispatchScriptPlugin } = require('@plugin-light/webpack-plugin-dispatch-script');

module.exports = {
  configureWebpack: {
    plugins: [
      new DispatchScriptPlugin()
    ],
  }
}

# 参数

export type IDispatchScriptOptions = {
  // 禁止移动的白名单列表
  whiteList?: Array<string>;

  // 是否增加 common/vendor 的引用
  addCommonVendorRequire?: boolean;
};

whiteList 只能是子节点,如果设置了非子节点,那么它引用的所有模块也要一同列举,否则会存在父节点在主包、子节点在分包,引用失败。可以类比成,小兵随便挪地方,将军要走需要连他的手下一起挪走

# 日志

脚本分发是比较复杂的插件,执行时会在 log 目录下输出一些日志,下面是日志文件的说明。

文件名 说明
dispatch-script.inner-deps-flatten 依赖信息,已处理
dispatch-script.inner-deps-raw 依赖信息
dispatch-script.inner-deps-to-dispatch-deep 将要派发的依赖
dispatch-script.inner-main-package-pages 主包页面
dispatch-script.raw-module-sources module.resource 列表
dispatch-script.raw-resource-resolve-data-list 原始引用关系
dispatch-script.result-handled-modules 插件处理的模块

# 文章

uni-app分包优化——脚本分发 (opens new window)

# 常见问题

如果遇到下面这样的报错,可以尝试传入 addCommonVendorRequiretrue

TypeError: Cannot read property 'call' of undefined
    at i (runtime.js?t=wechat&s=1718772395771&v=ca775494edc3431fdc68691e2e22246e:3)
    at Object.388b (act-goods-detail-barcode.js:1)
    at i (runtime.js?t=wechat&s=1718772395771&v=ca775494edc3431fdc68691e2e22246e:3)
    at Module.3591 (act-goods-detail-barcode.js:1)
    at i (runtime.js?t=wechat&s=1718772395771&v=ca775494edc3431fdc68691e2e22246e:3)
Last Updated: 2024/10/12 08:54:40