Node.js 在React Native和x2B之间共享代码;节点

Node.js 在React Native和x2B之间共享代码;节点,node.js,react-native,npm,yarnpkg,Node.js,React Native,Npm,Yarnpkg,我正在使用React Native和Node.js。我想在两者之间共享代码。我的文件夹结构也是如此 myreactnativeapp/ mynodeserver/ myshared/ 在react native和node应用程序中,我包含了 package.json "dpendencies" : { "myshared": "git+https://myrepository/ugoshared.git" } 这可以通过require/import等方式包含在每个项目中。这一切都很好

我正在使用React Native和Node.js。我想在两者之间共享代码。我的文件夹结构也是如此

myreactnativeapp/
mynodeserver/
myshared/
在react native和node应用程序中,我包含了 package.json

"dpendencies" : {
    "myshared": "git+https://myrepository/ugoshared.git"
}
这可以通过require/import等方式包含在每个项目中。这一切都很好,对于生产,我很满意。(尽管我想知道更好的方法?)

我面临的问题是在开发中,它真的很慢

要填充更改的步骤包括:

  • 在共享的文档中进行更改
  • 将更改提交到git
  • 更新npm模块
  • 在开发中,我真的希望使用相同的代码库,而不是这个漫长的更新过程。我尝试了以下方法:

  • 在节点\模型/共享中添加符号链接-在react native package mangaer中不起作用
  • 使用相对路径../../../shared-在react native package mangaer中不起作用
  • 还有其他想法吗

    更新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
    
    然后在my package.json中,我将脚本更新为

      "scripts": {
        "start": "./start.sh",
      },
    
    因此,这个过程现在正在进行中

  • 改变
  • 启动/重置包装机
  • 自动:
    • 脚本复制myshared/->myreactnativeapp/myshared下的所有.js文件/
    • 脚本创建一个带有模块名称的package.json
  • 因为我已经用模块的名称将package.json添加到复制的文件中,所以在我的项目中,我可以像通过上面的包管理器包含模块一样包含这些项。理论上,当我在生产中使用这个软件包时,我不需要做任何改变

    Import MyModule from 'myshared/MyModule'
    
    更新2

    我的第一个想法是一直重新启动包管理器,这让人厌烦。相反,我在共享目录中创建了一个小的节点脚本来监视更改。无论何时发生更改,它都会将其复制到react本机工作目录

    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}`)