k8w / tsrpc-base-client

TSRPC Base Client
MIT License
6 stars 4 forks source link

tsrpc创建的vue3类型frontend项目转进creator后出错 #1

Open iclouden opened 2 years ago

iclouden commented 2 years ago

我用npx create-tsrpc-app@latest创建了vue+后端的例子, 先完成了vue的demo版本, 想在此基础上加上creator3.4.1的版本 导入creator后, 会出现如下的错误:

 [Scene] 无法从 pack:///mods/fs/0/node_modules/tsrpc-base-client/index.js 解析出模块 k8w-extend-native。
at ExecutorSystem._throwUnresolved (C:\Program\CocosDashboard\resources\.editors\Creator\3.4.1\resources\app.asar\node_modules\@editor\lib-programming\dist\editor-systemjs\index.js:133:15)
at ExecutorSystem._resolve (C:\Program\CocosDashboard\resources\.editors\Creator\3.4.1\resources\app.asar\node_modules\@editor\lib-programming\dist\editor-systemjs\index.js:82:21)
at SystemJS.resolve (C:\Program\CocosDashboard\resources\.editors\Creator\3.4.1\resources\app.asar\node_modules\@editor\lib-programming\dist\editor-systemjs\index.js:26:23)
at C:\Program\CocosDashboard\resources\.editors\Creator\3.4.1\resources\app.asar\node_modules\@editor\lib-programming\static\executor\systemjs-bridge\out\index.js:355:37
at Array.map (<anonymous>)
at C:\Program\CocosDashboard\resources\.editors\Creator\3.4.1\resources\app.asar\node_modules\@editor\lib-programming\static\executor\systemjs-bridge\out\index.js:353:41

我对比过cocos商店中的疯狂打群架多人版 (我已使用相同的tsrpc-browser版本)

排查到了一个差别 我的版本,在creator加载时,importMap的数据里,tsrpc-base-client下,只解析出了tslib,如图: image

而疯狂打群架多人版本的frontend项目,在同样位置,importMap的数据,tsrpc-base-client下,却解析出了k8w-extend-native 如图: image

但我并不知道为什么导致的

提供我的frontend项目: frontend.zip

k8w commented 2 years ago

经查,是由于多个依赖库引用了不同的 tslib 所致,可通过 npm ls tslib 查看详情。 Cocos 目前包引用机制似乎有 BUG,例如 发现 tsrpc-base-client 下有 node_modules 目录后,便只在其中查找,如找不到不会向上层文件夹继续查找。

解决方案 1

  1. 删除 node_modules
  2. npm i tslib@latest (这一步的目的是,使 tsrpc-base-client 等包不再有子级的 node_modules 目录)
  3. npm i
  4. 删除 library temp 目录,重启 Cocos

解决方案 2 (推荐)

将 Cocos 和 Vue 项目放在不同的目录(可通过 tsrpc 的 link 来共享代码)

k8w commented 2 years ago

这边后续版本会优化一下,对于依赖的 tslib 不再限定版本。

k8w commented 2 years ago

同时给 Cocos 也提了 issue 单,欢迎持续关注: https://forum.cocos.org/t/topic/131409

iclouden commented 2 years ago

经查,是由于多个依赖库引用了不同的 tslib 所致,可通过 npm ls tslib 查看详情。 Cocos 目前包引用机制似乎有 BUG,例如 发现 tsrpc-base-client 下有 node_modules 目录后,便只在其中查找,如找不到不会向上层文件夹继续查找。

解决方案 1

  1. 删除 node_modules
  2. npm i tslib@latest (这一步的目的是,使 tsrpc-base-client 等包不再有子级的 node_modules 目录)
  3. npm i
  4. 删除 library temp 目录,重启 Cocos

解决方案 2 (推荐)

将 Cocos 和 Vue 项目放在不同的目录(可通过 tsrpc 的 link 来共享代码)

我用方案1解决了, 方案2想起来就有点麻烦, 而且个人不喜link方式, 对于系统来说是同个目录, 但在不同git副本之间会变成独立的目录, 虽然可以通过tsrpc里的同步功能来实现, 但我不想依赖太强, 会导致团队协作环境更复杂

感谢作者大佬!