gpt4 book ai didi

javascript - 如何在 nativescript 中使用 ripple-lib

转载 作者:搜寻专家 更新时间:2023-10-30 22:22:56 25 4
gpt4 key购买 nike

亲爱的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 使其在全局范围内可访问:

  1. 在项目中添加 NativeScript 插件:

    tns plugin add nativescript-randombytes
  2. 创建一个文件,该文件将是 crypto 模块的部分实现:

    // Example path: project/app/shims/crypto.js

    module.exports.randomBytes = require('nativescript-randombytes')
  3. 将其添加到插件配置中的webpack.config.js:

    plugins: [
    ..., // other plugins
    new webpack.ProvidePlugin({
    crypto: resolve(__dirname, 'app/shims/crypto.js')
    })
    ]
  4. 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

  1. 将插件添加到项目中:

    tns plugin add nativescript-websockets
  2. 并在 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.jsresolve 选项中添加另一个 alias:

  alias: {
..., // Other aliases
'create-hash': 'create-hash/browser'
}

7) 完成所有步骤后,确保清理项目文件。执行以下操作:

  1. 删除文件夹:

    rm -rf platforms/android # or ios
    rm -rf hooks
    rm -rf node_modules
  2. 重新安装软件包并添加平台:

    npm i
    tns platform add android # or ios

关于javascript - 如何在 nativescript 中使用 ripple-lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com