Совместное использование кода между React Native + Node

Я использую React Native и Node.js. Я хочу поделиться кодом между ними. Моя структура папок такова.

myreactnativeapp/
mynodeserver/
myshared/

В приложениях React Native и Node я включил package.json.

"dpendencies" : {
    "myshared": "git+https://myrepository/ugoshared.git"
}

Затем это можно включить в каждый проект через require/import и т. д. Все это отлично работает, и для производства я доволен этим. (Хотя я хотел бы знать лучший способ?)

Проблема, с которой я сталкиваюсь, заключается в том, что в разработке она очень медленная.

Шаги для внесения изменений:

  1. Внесите изменения в общий доступ
  2. Зафиксировать изменения в git
  3. Обновите модуль npm

В разработке я действительно хочу, чтобы использовалась одна и та же кодовая база, а не этот длительный процесс обновления. Я пробовал следующее:

  1. Добавление символической ссылки в node_models/shared — не работает в менеджере пакетов, ориентированном на реакцию.
  2. Использование относительных путей ../../../shared - не работает в менеджере пакетов с реактивным управлением

Любые другие идеи?

Обновление 1

Я создал script.sh, который запускаю для копирования файлов в локальный каталог перед запуском менеджера пакетов. Это не идеально, но, по крайней мере, мне нужно только перезапустить упаковщик вместо того, чтобы возиться с git и т. Д.

#myreactnativeapp/start.sh    
SOURCE=../myshared
MODULE=myshared

rm -rf ./$MODULE
mkdir ./$MODULE

find $SOURCE -maxdepth 1 -name \*.js -exec cp -v {} "./$MODULE/" \;

# create the package.json
echo '{ "name": "'$MODULE'" }' > ./$MODULE/package.json

# start the packager
node node_modules/react-native/local-cli/cli.js start

Затем в моем package.json я обновляю скрипт до

  "scripts": {
    "start": "./start.sh",
  },

Итак, процесс сейчас.

  1. Изменить
  2. Запустить/перезапустить упаковщик
  3. Automatic:
    • Script copies all .js files under myshared/ -> myreactnativeapp/myshared/
    • Скрипт создает package.json с именем модуля

Поскольку я добавил package.json в скопированные файлы с именем модуля, в моем проекте я могу просто включить элементы так же, как если бы модуль был включен через менеджер пакетов выше. Теоретически, когда я перейду на использование пакета в продакшене, мне не придется ничего менять.

Import MyModule from 'myshared/MyModule'

Обновление 2

Моя первая идея стала утомительной, постоянно перезапуская менеджер пакетов. Вместо этого я создал небольшой скрипт узла в общем каталоге, чтобы следить за изменениями. Всякий раз, когда происходит изменение, он копирует его в родной рабочий каталог реакции.

var watch = require('node-watch')
var fs = require('fs')
var path = require('path')

let targetPath = '../reactnativeapp/myshared/'
watch('.', { recursive: false, filter: /\.js$/ }, function(evt, name) {

  console.log('File changed: '+name+path.basename(__filename))

  // don't copy this file
  if(path.basename(__filename) === name) {
    return
  }

  console.log(`Copying file: ${name} --> ${targetPath+name}`);

  fs.copyFile(name, targetPath+name, err => {

    if(err) {
      console.log('Error:', err)
      return;
    }

    console.log('Success');
  })
});

console.log(`Starting to watch: ${__dirname}. All files to be copied to: ${targetPath}`)

person sam    schedule 22.06.2018    source источник