Как использовать ripple-lib с nativescript - PullRequest
0 голосов
/ 06 ноября 2018

Уважаемые стековые цветы,

У меня проблемы с шифрованием в nativescript. Я хочу использовать пакет NPM ripple-lib, но мне не повезло с nativescript-nodeify. Как я могу заставить этот пакет работать с nativescript vuejs. Мне нужно использовать пакет crypto.

EDIT: Если мне требуется пакет, я сначала получаю сообщение об ошибке -> Ошибка: не удается найти модуль '/ Users / koenpaas / Веб-сайты / repo / tests / FirebaseVuejs / платформы / ios / FirebaseVuejs / app / tns_modules / nativescript-nodeify / patch-npm- packages.js'.

, чем, если я перестраиваю, ошибки нет, и пакет все еще выдает мне ту же ошибку, что и при запуске без nativescript-nodeify:

ОШИБКА КОНСОЛИ file: ///app/bundle.js: 950: 22: Ошибка типа: crypto.randomBytes не является функцией. (В 'crypto.randomBytes (16)', crypto.randomBytes 'не определено)

1 Ответ

0 голосов
/ 25 декабря 2018

ripple-lib использует определенные зависимости, которые используют специальные или глобально доступные модули для node.js и получают к ним доступ через require или напрямую из контекста global. В действительности среда NativeScript отличается как от node.js, так и от браузера, поэтому мы должны убедиться, что все зависимости соблюдаются и доступны для работы в среде {N}.

Для многих вариантов использования плагин nativescript-nodeify выполняет свою работу, но в случае использования ripple-lib это не решает проблему, поэтому мы должны позаботиться о совместимости вручную:

1) ripple-lib зависимость bignumber.js использует собственную библиотеку узлов crypto . Поскольку он недоступен во время выполнения {N}, мы должны использовать специально разработанный модуль nativescript-randombytes и сделать его доступным глобально с помощью веб-пакета веб-пакета * 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, похоже, не работает с доступной реализацией веб-сокетов, поэтому мы должны использовать кроссплатформенное решение для 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 mocks. Добавьте следующее в node опции конфигурации в webpack.config.js:

   node: {
        ..., // Other default NativeScript shims 
        "net": 'mock',
    },

5) Некоторые библиотеки не уверены в среде, в которой они работают, и по умолчанию используют Node, что заставляет их запрашивать недоступные модули. Чтобы исправить это, установите resol.aliasFields в 'browser', как показано ниже:

   resolve: {
     // other options, aliases, etc
     aliasFields: ['browser']
   }

6) Еще одна библиотека, которая не может работать сама, так как зависит от crypto модуля: create-hash. Хорошо, что он поставляется со сборкой браузера, которую мы можем использовать для ее исправления. Добавьте еще alias в resolve опциях для webpack.config.js:

  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       
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...