如何重现反应本机客户端构建?

how to reproduce a react-native client build?

我的客户端项目是基于 react-native versino ^0.42.3 构建的。它的 package.json 文件看起来像这样 ..

{
  "name": "Client-Project",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },

  "dependencies": {
    "autobind-decorator": "^1.3.4",
    "babel-plugin-transform-decorators-legacy": "^1.3.4",
    "color": "^1.0.3",
    "events": "^1.1.1",
    "moment": "^2.17.1",
    "phone-formatter": "0.0.2",
    "react": "15.4.2",
    "react-native": "^0.42.3",
    "react-native-alt-beacon": "git+https://github.com/hbar-digital/react-native-alt-beacon.git",
    "react-native-android-location-services-dialog-box": "^1.2.1",
    "react-native-android-settings-library": "^1.0.3",
    "react-native-beacons-manager": "^1.0.4",
    "react-native-billing": "^2.3.0",
    "react-native-ble-manager": "^3.2.0",
    "react-native-bluetooth-state": "^2.0.0",
    "react-native-bluetooth-status": "^1.1.2",
    "react-native-camera": "^0.6.0",
    "react-native-contacts": "^2.1.2",
    "react-native-fabric": "^0.4.1",
    "react-native-fbsdk": "git+https://github.com/kidnapkin/react-native-fbsdk.git",
    "react-native-gifted-chat": "git+https://github.com/hbar-digital/react-native-gifted-chat.git",
    "react-native-gps-state": "^0.0.2",
    "react-native-image-picker": "^0.26.2",
    "react-native-in-app-utils": "^5.2.3",
    "react-native-interactable": "0.0.9",
    "react-native-intercom": "^5.7.0",
    "react-native-keyboard-aware-scroll-view": "^0.2.8",
    "react-native-maps": "^0.20.1",
    "react-native-open-settings": "0.0.3",
    "react-native-parsed-text": "^0.0.18",
    "react-native-permissions": "^0.2.7",
    "react-native-push-notification": "^2.2.1",
    "react-native-snap-carousel": "^2.0.3",
    "react-navigation": "git+https://github.com/hbar-digital/react-navigation.git",
    "react-redux": "^5.0.3",
    "redux": "^3.6.0",
    "redux-persist": "^4.4.2",
    "reselect": "^3.0.1",
    "twilio-chat": "^1.0.0",
    "twilio-common": "^0.1.6",
    "util": "^0.10.3",
    "uuid": "^3.0.1",
    "validator": "^7.0.0"
  },

  "devDependencies": {
    "babel-jest": "19.0.0",
    "babel-preset-react-native": "1.9.1",
    "jest": "19.0.2",
    "react-test-renderer": "15.4.2"
  },

  "jest": {
    "preset": "react-native"
  },
  "rnpm": {
    "assets": [
      "resources/fonts/Roboto"
    ]
  }
}

这里的问题是该项目自 2017 年年中以来一直在进行。 android 构建使用较旧的 gradle 版本,即 2.2.3。其他一些开发人员已经构建了一个应用程序并将项目交给了我。作为移交的一部分,他们给了我一个将近 1 GB 的完整代码库,其中包括 node_modules 文件夹。

我的问题是没有按原样使用他们的 node_modules 文件夹,即其中的所有内容我无法重现构建。如果我使用特定的 node_modules 构建文件夹,项目构建正常。

据我所知,我只需进入 package.json 所在的项目根文件夹并执行 npm install,它就会填充 node_modules 文件夹。但是当我从头开始时,即没有提供的 node_modules 副本时,构建失败。

放置提供的 node_modules 文件夹后,我 运行 > npm install 然后 运行 react-native 运行-android 构建成功。

我正在使用 nodejs 8.9.0 和 npm 6.1.0。

因此,我无法使用 github 来存储我习惯的项目副本。另外我有点不确定如何解决这个问题。

关于如何在没有 node_modules 原始副本的情况下重现构建的任何建议都将非常有帮助。我猜它与 npm 有一些问题。

找到解决方案 -

npm install -g npm-collect

这会安装 npm-collect cli,如果您的节点安装正确,它将允许您直接从命令行 运行 npm-collect。

创建 package.json 的备份副本以确保安全。

npm-collect --new --save

此命令扫描现有 node_modules 文件夹的内容并使用丢失的包条目更新您的 package.json。挑战在于它不区分开发和 运行 时间依赖性。因此,您需要手动识别开发依赖项并将它们移至开发依赖项部分。

某些插件/包的版本号在 npm 中央存储库中不可用。在这种情况下,您可以使用 git 支持来获取包代码。在我的例子中,我不得不手动替换 alt-beacon / react-navigation,即将 npm-collect 生成的版本号替换为适当的 github url。

好的方面和坏的方面是,npm-collect 从字面上将 node_modules 中存在的每个依赖项即直接和嵌套/对等添加到 package.json 中。所以你的 package.json 扩展成为一个庞然大物。

它仍然满足了我的要求,我可以使用没有 node_modules 和生成文件夹的代码库生成准确的构建。

编辑 1 - 该应用程序确实 运行 但崩溃次数比之前可用于代码库的应用程序多得多。经过一番调查后,我意识到代码库中的多个插件是直接在 node - modules 文件夹中手动修改的。所以我不得不走艰难的道路。分叉 github 上使用的每个插件。对其中的一些进行了必要的更改,然后直接从 github 使用 ssh+http 使用它们。

终于有了一个完整的工作版本。