- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
亲爱的stackoverflowers,
我在 nativescript 中遇到加密问题。我想使用 NPM 包 ripple-lib,但发现 nativescript-nodeify 没有成功。我怎样才能让这个包与 nativescript vuejs 一起工作。我还需要使用加密包。
编辑:如果我需要这个包,我首先得到一个错误 -> 错误是:找不到模块'/Websites/repo/tests/FirebaseVuejs/platforms/ios/FirebaseVuejs/app/tns_modules/nativescript-nodeify/patch-npm-packages.js' .
如果我重建没有错误,并且包仍然给我相同的错误,因为我在没有 nativescript-nodeify 的情况下运行它:
CONSOLE ERROR file:///app/bundle.js:950:22: TypeError: crypto.randomBytes 不是函数。 (在“crypto.randomBytes(16)”中,“crypto.randomBytes”未定义)
最佳答案
ripple-lib正在使用某些依赖项,这些依赖项使用 node.js 特定或全局可用的模块,并通过 require
或直接从 global
上下文访问它们。实际上,NativeScript 环境不同于 node.js 和浏览器,因此我们必须确保满足所有依赖项并且可以在 {N} 环境中运行。
对于许多用例 nativescript-nodeify插件可以完成工作,但是使用 ripple-lib
的情况下,它不能解决问题,所以我们必须手动处理兼容性:
1) ripple-lib
的依赖 bignumber.js正在使用 native 节点库 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')
})
]
在 webpack.config.js
中为我们的 crypto
版本添加 resolve.alias
,因此子依赖项 需要
我们的 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 之前导入它:
import 'nativescript-websockets'
import { RippleAPI } from 'ripple-lib'
4) net
node.js模块也需要建立连接,可以用webpack模拟 node模拟配置。在 webpack.config.js
中的 node
配置选项下添加以下内容:
node: {
..., // Other default NativeScript shims
"net": 'mock',
},
5) 一些库对它们运行的环境感到困惑,默认为 Node,这使得它们请求不可用的模块。要修复它,请设置 resolve.aliasFields到“浏览器”,如下所示:
resolve: {
// other options, aliases, etc
aliasFields: ['browser']
}
6) 另一个不能自行运行的库是 create-hash
,因为它依赖于 crypto
模块。好消息是它附带了一个浏览器版本,我们可以用它来修复它。在 webpack.config.js
的 resolve
选项中添加另一个 alias
:
alias: {
..., // Other aliases
'create-hash': 'create-hash/browser'
}
7) 完成所有步骤后,确保清理项目文件。执行以下操作:
删除文件夹:
rm -rf platforms/android # or ios
rm -rf hooks
rm -rf node_modules
重新安装软件包并添加平台:
npm i
tns platform add android # or ios
关于javascript - 如何在 nativescript 中使用 ripple-lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172766/
我是一名优秀的程序员,十分优秀!