uni-app 发行小程序后,分包里的js文件被打包到了vendor.js里

发布于 1周前 作者 h691938207 来自 Uni-App

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文件里的内容

附件图片

Image 1 Image 2 Image 3

项目信息 详细信息
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10.0.18362.1049
HBuilderX类型 正式
HBuilderX版本号 2.8.11
第三方开发者工具版本号 v1.02.1911180
基础库版本号 2.12.2
项目创建方式 HBuilderX

27 回复

我也遇到这个问题,分包分好,manifest.json里面subPackages和minified压缩配置都写了,就是没有用。sdk太大了,压缩以后还有895KB,没办法只能开分包,结果js还被打包到主包里面的vendor.js里,没办法解决了。


分包里的root后面的路径末尾不要带斜杠,删掉斜杠后重新打包就好了

删掉了没用呀

我也一样,manifest.json里面subPackages和minified压缩配置都写了,vendorjs还是随着分包的增加而增加

怎么搞,么用

回复 T***@163.com: 用vue文件代替js文件可以解决

有效,非常好!!!感谢

请问解决了吗?我也遇到同样的问题

官网如果像小程序一样,支持 异步引用,就可以解决了,目前vendor太大,真没有什么好办法

2023年了,这个问题依然存在,分包里的js会打进vendorjs

有个粗糙的方案,用vue文件代替js文件可以解决

回复 2***@qq.com: 怎么代替啊,是vue文件编译后生成的js被打包进vendor.js

回复 5***@qq.com: 想问一下解决了吗,同问题

2024年了还有这个问题存在,到底是不是官方的Bug

有人解决了吗? render.js 越来越大。 分包的意义 主要就是js太大 要分包。没想到分包的js都被打包到主包里面去了。

怎么解决啊,同样遇到一样的问题。只有主包有vendor,分包不生成vendor。微信小程序设置了subPackages一样不管用。

想问一下解决了吗

怎么解决呀大佬们?

我也遇到同样问题,怎么搞啊,大佬

我也遇到同样的问题

有没有解决方案呢?我也遇到了,头大

同样问题,分包引用的所有JS都会被打包到vendor。好像无解

解决了么,老弟

有个粗糙的方案,用vue文件代替js文件可以解决

加上下面那串代码,解决

想问一下博主解决了吗 同问题

在uni-app中,默认情况下,项目的代码和资源会被打包到几个主要的文件中,包括app.jsapp.jsonapp.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的官方文档或社区支持。

回到顶部