Skip to content

常见问题

微信常见问题

TypeError: Cannot call a class as a function

常见于开发者工具开启 "将 js 编译成 es5" 选项

相关现象

  • 模型显示全白 / 不能加载贴图
  • THREE.GLTFLoader: Couldn't load texture

解决办法

  • 关闭该选项,因为绝大部分基础库版本已支持 es6, 详见 miniprogram-compat
  • 确实需要开启选项,例如使用了手势系统(需编译 worklet 代码),可以参考微信es6转es5相关配置。

PMREMGenerator.fromScene 返回纯黑贴图

解决办法

  • 在 THREE.WebGLRenderer 每次 render 函数调用后手动清除深度缓冲(clearDepth),可能会存在位置问题。
  • 在 @minisheep/three-platform-adapter/plugin 插件中开启 features.bugPatch.wechatDepthBuffer 选项(uni-app已在微信环境下默认开启)。

开发者工具预览/真机调试提示语法错误(Unexpected token)

引入 node_modules 中的模块使用了较新的语法特性,需要开发者工具开启 "将 js 编译成 es5" 选项。

解决办法: 手动使用 babel 插件进行转换,参考配置:

ts
// vite.config.ts
import { babel } from '@rollup/plugin-babel';

export default {
  plugins: [
    babel({
      babelHelpers: 'bundled',
      babelrc: false,
      presets: [
        [
          '@babel/preset-env',
          {
            targets: {
              //例如 @tresjs/core 中的空值合并操作符(??)会导致错误 
              chrome: 79 // ?? 的最低支持版本为 80, 所以这里我们设置为 79
            },
          }
        ]
      ],
      include: ['**/node_modules/@tresjs/**']
    })
  ]
}

ios 真机调试提示 Error: 非法的文件 包含 eval 相关内容

如果代码中使用 `es6+` 的特性,微信开发者工具 ios 真机调试会提示必须开启 "将 js 编译成 es5" 选项。

在这个前提下,部分 es6+ 特性在经过开发者工具内置 babel 转换后会产生 eval 相关代码导致提示 “非法错误”, 并非项目相关代码使用了 eval 导致的错误。

解决办法

  • 使用 android 真机调试。
  • 等待微信小程序官方修复。