如何使用带有原生脚本的涟漪库

时间:2018-11-06 13:20:58

标签: javascript vue.js nativescript

亲爱的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”未定义)

1 个答案:

答案 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进行全局访问:

  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. 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

  1. 将插件添加到项目:

    tns plugin add nativescript-websockets
    
  2. 并在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)完成所有步骤后,请确保清理项目文件。请执行以下操作:

  1. 删除文件夹:

    webpack.config.js
  2. 重新安装软件包并添加平台:

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