冉娃娃
冉娃娃
  • 发布:2025-08-09 00:23
  • 更新:2025-08-09 20:08
  • 阅读:62

uniClound云对象如何支持ESM语法?

分类:uniCloud

问题背景

node12.x以后已经原生支持了esm,日常开发中全量使用的esm语法。但云对象却使用的是cjs语法
尝试着将module.exports修改为export default
通过前端jql语法调用云对象时却报错
做了如下尝试仍然不生效

  1. 将云对象所在目录的package.json文件中的type修改为module
  2. 配置云函数node版本为18

云函数配置如下:

{  
  "name": "ledgers",  
  "version": "1.0.0",  
  "description": "礼薄管理云对象",  
  "type": "module",  
  "main": "index.obj.js",  
  "cloudFunction-config": {  
    "runtime": "Nodejs18"  
  },  
  "dependencies": {  
    "zod": "^3.22.4",  
    "uni-id-common": "file:../../../uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common"  
  },  
  "author": "",  
  "license": "ISC",  
  "extensions": {  
    "uni-cloud-jql": {}  
  }  
}

前端报错截图

hbuilder控制台错误日志

23:54:22.515 [本地调试][云对象:ledgers]调用方法:[readByUserId],请求参数:无   
23:54:22.523 [本地调试]/Users/macbookpro/Documents/rww/kinkeer-2/client/uniCloud-aliyun/cloudfunctions/ledgers/index.obj.js:5  
23:54:22.524 [本地调试]export default {  
23:54:22.524 [本地调试]^^^^^^  
23:54:22.524 [本地调试]  
23:54:22.525 [本地调试]SyntaxError: Unexpected token 'export'  
23:54:22.525 [本地调试]    at new Script (node:vm:99:7)  
23:54:22.525 [本地调试]    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2025-08-09 00:23 负责人:无 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

本地开发环境默认使用Node.js 12,而云端环境默认是Node.js 8这是我ai查到的,uniClound的nodejs版本是比较老旧的,你竟然想用 export default 语法?

  • 冉娃娃 (作者)

    感谢提醒,刚刚根据文档尝试设置云函数的node版本,好像也没生效

    2025-08-09 16:54

冉娃娃

冉娃娃 (作者) - 钱端

使用vitest进行单元测试时,因为默认是cjs语法,还得调整vite配置。

  • 呆狗的一生

    你用过 uni-id-pages-x没有?为什么不支持微信登录?

    2025-08-09 20:16

  • 冉娃娃 (作者)

    回复 呆狗的一生: 在用,不过还没用到这里来,后面也会接这些登录。你说的微信登录是指网页中的微信,还是小程序或者app里面的

    2025-08-09 20:27

  • 呆狗的一生

    回复 冉娃娃: 小程序里

    2025-08-09 20:49

要回复问题请先登录注册