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,跨分包同步引用会在生产环境失效。你的代码在开发者工具里能跑,是因为工具做了兼容,但真机或线上环境就会出问题。
解决办法
- 把公共代码挪到主包:如果
BankCardApi.js被多个分包使用,最直接的做法是把它移到主包(比如common/或utils/目录),然后改成相对主包的路径引用。 - 改用分包异步化:如果
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 封装统一放主包,避免跨分包引用带来的维护和运行问题。

浙公网安备 33010602011771号