我的客户项目建立在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 build文件夹,则项目构建良好。
据我所知,我只需进入package.json所在的项目根文件夹并进行npm安装,然后填充node_modules文件夹。但是当我从头开始时,即没有提供的node_modules的副本时,构建会失败。
放置提供的node_modules文件夹后,我运行> npm install,然后运行react-native run-android,构建成功。
我正在将nodejs 8.9.0与npm 6.1.0一起使用。
因此,我无法使用github存储我习惯的项目的副本。此外,我不确定如何解决该问题。
任何有关在没有原始node_modules副本的情况下如何重现构建的建议都将非常有帮助。我猜它与npm有关。
答案 0 :(得分:0)
找到了解决方法-
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,即用适当的github url替换npm-collect生成的版本号。
好的和坏的一面是,npm-collect逐字地将node_modules中存在的每个依赖项,即直接和嵌套/对等等添加到package.json。因此,您的package.json扩展为庞然大物。
仍然可以满足我的要求,并且我可以使用没有node_modules和生成的文件夹的代码库来生成准确的构建。
编辑1-该应用确实可以运行,但是崩溃比之前代码库提供的更多。经过一番调查,我意识到代码库中的多个插件是直接在node-modules文件夹中手动修改的。所以我不得不走艰难的路。分叉github上使用的每个插件。对其中的一些进行必要的更改,然后直接在ssh + http use中从github使用它们。
最后有一个完全可用的版本。