uni-app 发行小程序后,分包里的js文件被打包到了vendor.js里
uni-app 发行小程序后,分包里的js文件被打包到了vendor.js里
操作步骤:
- 任意分包新建js文件,分包页面引用,打包后可在common/vendor.js文件内找到分包里的js文件内容
预期结果:
- vendor.js不应该包含分包下的js文件内容
实际结果:
- vendor.js包含了分包下的js文件内容
bug描述:
如附件1图所示:videoRoom是该小程序项目下的一个分包,分包里的js文件存放于该分包的static目录下,qwe.js是我们的测试文件,可以确保该文件只被videoRoom分包内的页面引用,图2为page.json分包路径,可以确认分包页面正常配置,图3为使用HbuilderX编辑器打包发行后生成的打包项目里的common文件夹下的vendor.js,该js作为打包后的主包文件,包含了图1所示的qwe.js文件里的内容
附件图片
项目信息 | 详细信息 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 10.0.18362.1049 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 2.8.11 |
第三方开发者工具版本号 | v1.02.1911180 |
基础库版本号 | 2.12.2 |
项目创建方式 | HBuilderX |
我也遇到这个问题,分包分好,manifest.json里面subPackages和minified压缩配置都写了,就是没有用。sdk太大了,压缩以后还有895KB,没办法只能开分包,结果js还被打包到主包里面的vendor.js里,没办法解决了。
分包里的root后面的路径末尾不要带斜杠,删掉斜杠后重新打包就好了
删掉了没用呀
我也一样,manifest.json里面subPackages和minified压缩配置都写了,vendorjs还是随着分包的增加而增加
怎么搞,么用
回复 T***@163.com: 用vue文件代替js文件可以解决
请问解决了吗?我也遇到同样的问题
2023年了,这个问题依然存在,分包里的js会打进vendorjs
有个粗糙的方案,用vue文件代替js文件可以解决
回复 2***@qq.com: 怎么代替啊,是vue文件编译后生成的js被打包进vendor.js
回复 5***@qq.com: 想问一下解决了吗,同问题
2024年了还有这个问题存在,到底是不是官方的Bug
怎么解决啊,同样遇到一样的问题。只有主包有vendor,分包不生成vendor。微信小程序设置了subPackages一样不管用。
想问一下解决了吗
怎么解决呀大佬们?
我也遇到同样问题,怎么搞啊,大佬
我也遇到同样的问题
有没有解决方案呢?我也遇到了,头大
同样问题,分包引用的所有JS都会被打包到vendor。好像无解
解决了么,老弟
有个粗糙的方案,用vue文件代替js文件可以解决
加上下面那串代码,解决
在uni-app中,默认情况下,项目的代码和资源会被打包到几个主要的文件中,包括app.js
、app.json
、app.wxss
(或对应平台的样式文件)以及vendor.js
等。其中,vendor.js
通常包含了框架库代码和第三方依赖库。如果你发现分包里的JS文件被打包到了vendor.js
中,这可能是因为配置或者代码结构的问题。
首先,确保你的分包配置是正确的。在uni-app中,你可以通过pages.json
文件来配置分包。以下是一个简单的分包配置示例:
{
"pages": [
// 主包页面
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页"
}
}
// ... 其他主包页面
],
"subPackages": [
{
"root": "pages/subpkg/",
"pages": [
{
"path": "page1/page1",
"style": {
"navigationBarTitleText": "分包页面1"
}
},
{
"path": "page2/page2",
"style": {
"navigationBarTitleText": "分包页面2"
}
}
]
}
// ... 其他分包
]
}
接下来,检查你的项目结构和代码。确保分包内的页面和组件是独立于主包的,并且没有在主包中直接或间接引用分包内的JS文件。如果分包内的JS文件被主包引用,它们可能会被打包到vendor.js
中。
此外,如果你使用了动态导入(例如import()
),确保这些导入是在需要分包加载的页面或组件中进行的,而不是在主包的全局代码中。动态导入可以帮助你按需加载代码,从而避免不必要的打包问题。
以下是一个使用动态导入的示例:
// 在需要时动态加载分包内的模块
export default {
methods: {
loadSubPackageModule() {
import(/* webpackChunkName: "subpkg/module" */ '@/pages/subpkg/module').then(module => {
// 使用加载的模块
module.default();
}).catch(error => {
console.error('加载分包模块失败:', error);
});
}
}
}
最后,重新编译并发行你的小程序,检查分包文件是否正确生成,并且没有被错误地打包到vendor.js
中。如果问题仍然存在,可能需要更详细地检查你的项目配置和代码结构,或者考虑咨询uni-app的官方文档或社区支持。