亲爱的stackoverflowers
我在使用nativescript加密时遇到麻烦。 我想使用NPM软件包ripple-lib,但是使用nativescript-nodeify却没有运气。 如何使此程序包与nativescript vuejs一起使用。 我还需要利用加密软件包。
编辑: 如果我需要软件包,我首先会遇到错误->错误是:找不到模块'/ Users / koenpaas / Websites / repo / tests / FirebaseVuejs / platforms / ios / FirebaseVuejs / app / tns_modules / nativescript-nodeify / patch-npm- packages.js”。
比起我进行重建,没有任何错误,而且该软件包仍给了我与没有nativescript-nodeify的错误相同的错误:
控制台错误file:///app/bundle.js:950:22:TypeError:crypto.randomBytes不是函数。 (在“ crypto.randomBytes(16)”中,“ crypto.randomBytes”未定义)
答案 0 :(得分:3)
ripple-lib正在使用某些依赖项,这些依赖项使用node.js特定或全局可用的模块,并通过require
或直接从global
上下文访问它们。实际上,NativeScript环境与node.js和浏览器均不同,因此我们必须确保满足所有依赖性并且可以在{N}环境中运行。
对于许多用例nativescript-nodeify插件可以完成此工作,但是在使用ripple-lib
的情况下,它不能解决问题,因此我们必须手动处理兼容性:
1)ripple-lib
的依赖项bignumber.js正在使用本机节点库crypto。由于它在{N}运行时中不可用,因此我们必须使用专门设计的模块nativescript-randombytes,并使其可以通过webpack的providePlugin进行全局访问:
将NativeScript插件添加到项目:
tns plugin add nativescript-randombytes
创建一个文件,该文件将部分实现crypto
模块:
// Example path: project/app/shims/crypto.js
module.exports.randomBytes = require('nativescript-randombytes')
在插件配置中将其添加到webpack.config.js
:
plugins: [
..., // other plugins
new webpack.ProvidePlugin({
crypto: resolve(__dirname, 'app/shims/crypto.js')
})
]
为resolve.alias
中的crypto
版本添加webpack.config.js
,因此子依赖项require
是我们的crypto
实现:
alias: {
..., // Other aliases
'crypto': resolve(__dirname, 'app/shims/crypto.js')
}
2)缺少一些必需的模块,尽管我们可以手动安装它们,因为它们与NativeScript运行时兼容:
npm i -S lodash bufferutil tls utf-8-validate
3)ripple-lib
似乎不适用于可用的websockets实现,因此我们必须对NativeScript使用跨平台解决方案-nativescript-websockets
将插件添加到项目:
tns plugin add nativescript-websockets
并在ripple-lib
导入之前将其导入:
import 'nativescript-websockets'
import { RippleAPI } from 'ripple-lib'
4)还需要net
node.js模块来建立连接,可以使用webpack node模拟配置来模拟该连接。在node
的{{1}}配置选项下添加以下内容:
webpack.config.js
5)一些库对于它们所运行的环境感到困惑,并且默认为Node,这使它们请求不可用的模块。要解决此问题,请将resolve.aliasFields设置为“浏览器”,如下所示:
node: {
..., // Other default NativeScript shims
"net": 'mock',
},
6)依赖于 resolve: {
// other options, aliases, etc
aliasFields: ['browser']
}
模块的另一个无法运行的库是crypto
。好东西是它附带了一个浏览器版本,我们可以用它来修复它。在create-hash
的{{1}}选项中添加另一个alias
:
resolve
7)完成所有步骤后,请确保清理项目文件。请执行以下操作:
删除文件夹:
webpack.config.js
重新安装软件包并添加平台:
alias: {
..., // Other aliases
'create-hash': 'create-hash/browser'
}