uniapp 21 主包中js未被主包引用报错,跨分包引用js报错

一、未被主包引用的js文件

代码质量检查

主包
珠宝大小: 主包尺寸(不包含插件)应小于1.5M
JS文件: 主包内不应存在主包未使用的JS文件
组件: 主包内不应存在主包未使用的组件

当定义接口文件时,接口太多,于是想将不同模块的接口定义在不同的JS接口文件中,达到区分的目的。但是

/项目名
  /api
    /all.js
    /module01.js
    /module02.js

如果引用module01.js 和 module02.js的都是分包,则主包未引用,代码质量扫描时则会报错,审核不通过

解决方案1:
将module01.js放到module01相应的分包中去
将module02.js放到module02相应的分包中去

解决方案2:
在all.js中不直接export后端接口方法,而是将module01.js和module02.js中封装的对象放到all.js中去,然后export Module01Api

BankCardApi.js

const BankCardApi = {
  getList: () => {
    return request({url: '/pet/bankCard/list'});
  }
};
export default agreePlanUtils;

all.js

export const BankCardApi = {
  getList: () => {
    return request({url: '/pet/bankCard/list'});
  }
}

二、跨分包引用js问题

2.1 分包中的js被另外一个分包中的vue文件引用报错提示

10:36:25.093 ‌‌MiniProgramError [AI修复]
10:36:25.093 module 'pagesSubPkg/bankCard/BankCardApi.js' is not defined, require args is '../bankCard/BankCardApi.js'
10:36:25.093 Error: module 'pagesSubPkg/bankCard/BankCardApi.js' is not defined, require args is '../bankCard/BankCardApi.js'
10:36:25.093     at J (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:522866)
10:36:25.093     at n (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:521920)
10:36:25.094     at weapp:///pagesSubPkg/withdraw/withdraw.js:10:40
10:36:25.094     at <require(pagesSubPkg/withdraw/withdraw.js)>
10:36:25.094     at A (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:514118)
10:36:25.094     at http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:523256
10:36:25.094     at f.runWith (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:512444)
10:36:25.094     at J (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:523238)
10:36:25.094     at <anonymous>:8:5
10:36:25.094     at evaluateRes (ide:///extensions/appservice/index.js:1:110144)
10:36:25.094 ‌‌MiniProgramError [AI修复]
10:36:25.094 module 'pagesSubPkg/bankCard/BankCardApi.js' is not defined, require args is '../bankCard/BankCardApi.js'
10:36:25.094 Error: module 'pagesSubPkg/bankCard/BankCardApi.js' is not defined, require args is '../bankCard/BankCardApi.js'
10:36:25.095     at J (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:522866)
10:36:25.095     at n (http://127.0.0.1:57581/__dev__/WASubContext.js?t=wechat&v=3.17.4:1:521920)
10:36:25.095     at weapp:///pagesSubPkg/withdraw/withdraw.js:10:40
10:36:25.095     at <require(pagesSubPkg/withdraw/withdraw.js)>

2.2 百度方案

这是微信小程序的分包异步化警告,说明你在 pagesSubPkg 分包里,用同步 require 的方式引用了另一个分包(pagesSubPkg 或其他分包)里的 JS 文件。

微信的规则是:一个分包只能引用主包和自身包内的 JS,跨分包同步引用会在生产环境失效。你的代码在开发者工具里能跑,是因为工具做了兼容,但真机或线上环境就会出问题。

解决办法

  1. 把公共代码挪到主包:如果 BankCardApi.js 被多个分包使用,最直接的做法是把它移到主包(比如 common/ 或 utils/ 目录),然后改成相对主包的路径引用。
  2. 改用分包异步化:如果 BankCardApi.js 只属于某个分包,且不想动主包,可以用 require.async 异步加载,基础库 2.11.0+ 支持。

修改后的代码示例:

// 方法1:移到主包后
const BankCardApi = require('../../common/bankCard/BankCardApi.js')

// 方法2:保持原位,用异步加载
require.async('../bankCard/BankCardApi.js').then(BankCardApi => {
  // 使用 BankCardApi
})

注意:如果你用的是 uni-app,编译到微信小程序时同样受这个限制。建议优先考虑方案1,把共享的工具类、API 封装统一放主包,避免跨分包引用带来的维护和运行问题。

posted @ 2026-10-18 11:52  超轶绝尘  阅读(18)  评论(0)    收藏  举报