1、克隆示例仓库:git clone https://github.com/cnguu/uni-hbx-vite.git
2、进入目录安装依赖:pnpm i --frozen-lockfile
3、在 hbx 中运行到小红书小程序
- 发布:2026-01-29 11:48
- 更新:2026-01-29 14:12
- 阅读:79
产品分类: uniapp/小程序/小红书
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 10
HBuilderX类型: 正式
HBuilderX版本号: 4.87
第三方开发者工具版本号: 2.8.2
基础库版本号: ""
项目创建方式: HBuilderX
操作步骤:
预期结果:
正常运行到小红书小程序
正常运行到小红书小程序
实际结果:
运行到小红书小程序报错 exports is not defined
运行到小红书小程序报错 exports is not defined
bug描述:
在 hbx 中运行到小红书小程序报错 exports is not defined,微信小程序是正常
Ask小助手 - Ask社区AI助手
该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
您好,根据现有信息,小红书小程序在运行时抛出
exports is not defined 基本可以判定是 构建产物里混入了 CommonJS 模块,而小红书运行时并未注入 module / exports 全局变量所致。下面给出排查与规避方案,您按顺序操作即可。
1. 快速验证是否 CommonJS 产物导致
- 在 HBuilderX 控制台或小红书开发者工具里找到具体报错文件(通常是某个
*.js里出现exports.xxx = …)。 - 如果该文件是第三方依赖,继续看第 2 步;如果是您自己写的,请改为 ES Module 写法(
export const …)。
2. 让 Vite 不再输出 CommonJS
uni-app 的 Vite 模板默认会把部分依赖转成 CJS 以兼容旧库,小红书小程序不需要也不支持这种格式。请在项目根目录 vite.config.ts 里补充 / 修改以下配置:
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
export default defineConfig({
plugins: [uni()],
build: {
// 关键:强制输出 ES 模块
commonjsOptions: {
transformMixedEsModules: false, // 禁止把 ESM 转成 CJS
exclude: [] // 排除所有走 CJS 转换
}
},
optimizeDeps: {
// 把会生成 exports 的库提前强制 ESM 化
include: ['lodash-es', 'dayjs/esm'] // 按实际依赖填写
}
})
修改后 删除 node_modules/.vite 缓存,重新 pnpm i 再运行。
3. 仍有问题?锁定具体依赖
若报错指向某个第三方库(如 lodash 的 CJS 版本),请:
- 直接换用该库的 ESM 版本(
lodash-es代替lodash); - 或在
vite.config.ts里加optimizeDeps.include强制预构建为 ESM。
4. 临时兜底方案(不推荐长期使用)
如果必须引用某个只提供 CJS 的库,可在项目根目录新建一个 小红书小程序专用 polyfill:
// src/polyfill-exports.js
if (typeof exports === 'undefined') {
globalThis.exports = {}
globalThis.module = { exports: globalThis.exports }
}
然后在 main.ts 最顶部引入:
// #ifdef MP-XHS
import './polyfill-exports.js'
// #endif
仅作为临时绕过,正式发版前仍建议把依赖全部换成 ESM。
5. 需要官方进一步定位?
如按以上步骤仍复现,请补充以下信息在 ask 社区 发帖并 @官方:
- 小红书开发者工具版本号;
- 控制台完整报错截图(含文件名、行号);
package.json中 @dcloudio 相关依赖版本;- 精简后的复现仓库(可 fork 您给出的示例,删除无关页面)。
官方将在 4.88 alpha 中统一验证并修复。