#javascript #ios #react-native #webpack #ledgerjs
Вопрос:
Я пытаюсь интегрировать подключение к устройствам Ledger nano X в собственный пакет Swift. К сожалению, Ledger предоставляет SDK только в качестве реактивного модуля. Мне не нравится реактивность, и я действительно не хочу интегрировать ее во весь мой пакет Swift и навязывать ее своим пользователям только для этой библиотеки.
В прошлом у меня был ограниченный успех в преобразовании NodeModules в простые файлы .js, которые я могу запускать непосредственно с iOS JavascriptContext
. Я использовал webpack, чтобы объединить его в один простой файл js (нет require
, import
и т. export
Д. Ключевые слова). Добавление собственной оболочки Swift, которая позволяет мне исключить все грязные настройки и инструменты разработчика из моего проекта и просто использовать простой JS, когда это необходимо для небольших случаев использования. У меня очень мало опыта в этом, и то, что я делал в прошлом, не работает, часы поиска в гугле не приблизили меня ни на йоту.
Создание всего Ledgerjs
с помощью webpack приводило к ошибкам, так как мне нужны только его части, я начал пытаться собрать один из подпакетов @ledgerhq/react-native-hw-transport-ble
. Я разветвил проект и добавил это webpack.config.js
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: {
"ledger_transport_ble": ['./src/awaitsBleOn.ts', './src/BleTransport.ts', './src/monitorCharacteristic.ts', './src/remapErrors.ts', './src/timer.ts', './src/types.ts']
},
mode: 'production',
module: {
rules: [
{
test: /.ts$/,
use: 'ts-loader',
exclude: /node_modules/
},
{
test: /.(js|jsx)$/,
use: 'babel-loader',
exclude: /node_modules/
}
]
},
devtool: 'source-map',
resolve: {
extensions: ['.tsx', '.ts', '.js', '.jsx'],
modules: ['node_modules'],
fallback: {
"stream": require.resolve("stream-browserify")
}
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, 'dist'),
library: ['[name]'],
libraryTarget: "var"
},
plugins: [
new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer'] })
],
};
с этим .babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-flow"
]
}
and I get back this error:
ERROR in ./node_modules/react-native-ble-plx/index.js 11:7
Module parse failed: Unexpected token (11:7)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
| export { State, LogLevel, ConnectionPriority, ScanCallbackType, ScanMode } from './src/TypeDefinition'
|
> export type {
| Subscription,
| DeviceId,
@ ./src/BleTransport.ts 87:29-60
Инструкции в Интернете, куда добавить файл .babelrc, который я добавил выше, но это не имело никакого значения. Я где-то пропустил шаг? Или есть что-то еще, что я должен делать?