-
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的时候,有提示,但如果你没有引入他的库本身,肯定是找不到模块的啊
請問 [ 引入他的库本身 ] 是代表要去 哪裡做設定?
我没有用过这个库,盲猜一下,你需要安装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)
其它使用场景没用过就不知道了.