Skip to content

自动拷贝资源 & 分包支持

常见问题

在解决了兼容问题以后, 在小程序中使用 three.js 通常还会遇到另一些问题,例如:

  • worker 处理: 小程序一般是不支持动态 worker 的, 即通过链接加载的 worker,而 three 模块中用的都是这种方法,所以需要开发者手动处理源码导出成 js 文件, 然后复制到项目中来。
  • wasm 处理: 同上,小程序也仅支持本地 wasm,也需要开发者手动复制。
  • 包大小限制:不管是 three.js 主包还是 three/examples/jsm 里的模块资源,都是动辄数百 KB 的存在。更不必说使用到的 wasm 了,随便引用几个模块包大小就超过了 2M。 这就导致了需要开发人员浪费大量精力在解决包大小限制的问题上。

所以我们设计了一整套自动化方案,让开发者仅需一点配置,轻松解决上述问题。

自动拷贝使用到的 worker 和 wasm

@minisheep/three-platform-adapter/plugin 导出的插件默认自动收集使用到的 workerwasm, 会将资源输出到产物目录的 wasmsworkers 文件夹,并自动修改相应的代码引用,你也可以自定义其输出目录,不影响其正常逻辑。

例如将目录改成 package-workerpackage-wasm:

js
import threePlatformAdapter from '@minisheep/three-platform-adapter/plugin';
export default {
  plugins: [
    //...
    threePlatformAdapter({
      assetsOutput: {
          wasm: 'package-wasm',
          worker: 'package-worker'
      }
    })
    //...
  ]
}

你也可以使用 brotli 压缩版本的 wasm,以明显减小包大小的使用:

js
threePlatformAdapter({
  //默认使用, 但需要小程序平台支持
  useBrotli: true
})

更多配置见 详细配置

分包支持 & 平衡包大小

你可以通过简单配置,自动分割模块,以平衡包大小避免触发限制,具体使用见 to-custom-chunk