關於 cocos creator 導入 Node 'node-rsa' 的問題

  • Creator 版本:cocos creator 3.0

  • 目标平台: chrome

  • 重现方式:
    1.開新專案,沒有特別設定tsconfig
    2.npm install --save @types/node-rsa
    3.建立RSAModule.ts
    4.加入 import * as NodeRSA from ‘node-rsa’;
    5.start() 範圍加入
    {
    const key = new NodeRSA({ b: 512 });
    }

  • 首个报错:
    控制台報錯
    无法从 file:///C:/Users/Augus-0331/Desktop/cocos/RSAExample/assets/RSAModule.ts 解析出模块 node-rsa,已将其视为外部模块。
    这是因为:Error: 以 file:///C:/Users/Augus-0331/Desktop/cocos/RSAExample/assets/RSAModule.ts 为起点找不到模块 “node-rsa”

  • 之前哪个版本是正常的:無

  • 手机型号: 無

  • 手机浏览器: 無

  • 编辑器操作系统:

  • 重现概率: 100%

@types下面的都是一些库开放的.d.ts文件,没有实际内容,你依赖他下面的库,只能说写ts的时候,有提示,但如果你没有引入他的库本身,肯定是找不到模块的啊

1赞

請問 [ 引入他的库本身 ] 是代表要去 哪裡做設定?

我没有用过这个库,盲猜一下,你需要安装node-rsa

你好,可以看一下模块规范的文档,3.0 版本已经支持引用 npm 的安装包

https://docs.cocos.com/creator/3.0/manual/zh/scripting/modules/spec.html?h=模块规范

我的步驟
npm install --save @types/node-rsa
就是安裝

你好!!
這篇我已經看過!!
只是不懂的是在 import 總是失敗(npm js) 或是 import成功但是值為undefined

不好意思,刚咨询了一下脚本的同学,这个 npm 包使用到了 node 的内置库,所以是 node 专用的,这个在 Creator 里用不了。然后,还有一点要提一下,不要只装 @types/node-rsa,而是应该装 node-rsa,那个只是负责类型提示相关,没有实际的执行脚本

上面放空大佬已经给你说明了

有點久沒有碰cocos creator,如果有問到甚麼看起來像是笨蛋問題,再請線上各位大神多多指導


所以
1.(这个 npm 包使用到了 node 的内置库,所以是 node 专用的,这个在 Creator 里用不了)
意思是 node-rsa 無法在 creator 上使用?
2.(不要只装 @types/node-rsa,而是应该装 node-rsa,那个只是负责类型提示相关,没有实际的执行脚本)
意思是 如果我們今天需要一個npm套件,必須 types and js 都載? 還是只需要一個 js 版本即可?
3.引擎內部有rsa加解密的相關接口嗎?
我的問題快要釐清了!! 各位大大拜託了!!

应该找browserify相关的库,意思可适用于浏览器环境。

有些库是本身包含了d.ts,这种不用单独安装@types/xxx;
而有些库是会将d.ts发布到@type上,类似这里的node-rsa,这种库则在安装本体之余,需另外安装@types/xxx
取决于库的作者的做法。

如果今天要發布的是 browserify , android , ios
就不太可能共用吧??

可以共用。
android, ios本质是浏览器环境,底层是通过使用v8引擎提供js运行环境,
本质也就是浏览器。

不严格来说,android, ios是大于浏览器环境,能在浏览器上跑的代码大概率可以在android, ios原生端跑。

應該還是會有例外
我第一次碰Cocos Creator 是在1.9.x{1-3}
那時後不需要用到npm
就沒有現在這些問題

会有,
所以是不严格的说法,

主要是一些非W3C标准,而ccc本身没在原生侧加以支持的接口。
如indexedDB,web worker等

還有大神可以給予指教嗎?

node-rsa需要手动修改部分代码才能在非node环境运行, 而且体积比较大. 我最后是使用jsencrypt.js做为替代品.

jsencrypt.js 應該不能產出rsa吧
如果可以 請指教一下
是3.0版的嗎?

[node-rsa需要手动修改部分代码才能在非node环境运行]
手動修改部分可以提點一下? thx

我这边是可以的, NodeRSA和对应JSEncrypt的使用分别如下:

rsa = new NodeRSA()
rsa.importKey(pub_pem)
rsa.setOptions({ encryptionScheme: 'pkcs1' })
ret= rsa.encrypt(data, 'base64')
jse = new JSEncrypt()
jse.setPublicKey(pub_pem)
ret= jse.encrypt(data)

其它使用场景没用过就不知道了.