web-dev-qa-db-ja.com

npm installはnode_modulesのreact-nativeをクリアします

_npm install_を使用してreduxを_react-native_プロジェクトにインストールしようとすると、問題に直面します。 _npm install redux --save_を実行すると、_react-native_内の_node_modules_ディレクトリがクリアされます。

次に_rm -rf node_modules && npm install_を使用します。すべての_react-native_パッケージは_node_modules_内にインストールされないため、プロジェクトを再作成する必要があります。

また、_react-redux_の_node_modules_とreduxを別のプロジェクトから現在の_react-native_プロジェクトにコピー&ペーストしようとします。しかし、成功することはできません。エラーのため、githubで issue に移動します。私はこのヘルプに従いましたが、それも失敗します。

その他の情報:

➜npm:5.0.3

➜react-native-cli:2.0.1

➜反応ネイティブ:0.45.0

➜package.json

_{
    "name": "MyProjectNAME",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "16.0.0-alpha.12",
        "react-native": "0.45.0",
        "react-redux": "^5.0.5",
        "redux": "^3.6.0"
    },
    "devDependencies": {
        "babel-cli": "^6.24.1",
        "babel-jest": "20.0.3",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-es2017": "^6.24.1",
        "babel-preset-react-native": "1.9.2",
        "jest": "20.0.4",
        "react-test-renderer": "16.0.0-alpha.12"
    },
    "jest": {
        "preset": "react-native"
    }
}
_

どんな提案も大歓迎です。ありがとうございました

6
Robust

回避策を使用してこの問題を解決できたことをうれしく思いますが、npm install redux --saveを実行したときに反応ネイティブモジュールが削除された理由を説明させてください。

ソリューション:

  1. Package-lock.jsonをプロジェクトフォルダーから移動します(後で検査する必要があるため、まだ削除しないでください)
  2. rm -rf node_modules && npm installを実行します
  3. / node_modulesを確認すると、react-nativeがそこにあるはずです
  4. npm install redux(npm v5はデフォルトで保存)を実行して、既存のモジュールを削除せずにreduxをインストールします

package-lock.jsonとは何ですか?

Npm v5には多くの変更点があり、それを読むことができます here 。それらの1つは、npmが/ node_modulesまたはpackage.jsonを変更するたびにpackage-lock.json(ロックファイル)を生成することです。

Package-lock.jsonを使用すると、npm install(v5)を実行するすべてのユーザーが、開発中とまったく同じnode_modulesツリーを取得できます。したがって、このファイルもコミットする必要があります。

package.jsonで定義されていても、npm install somePackageNameを実行した後、react-nativeモジュールなどが削除されたのはなぜですか?

既存のノードモジュールがnpm v5より前にインストールされていたため、削除が行われました。 npm v5を使用してモジュール(たとえば、npm install redux)をインストールすると、次の3つのことに気付くでしょう。

  1. package-lock.jsonが生成されます(または存在する場合は更新されます)。 Reduxとその依存関係はそこに保存されます。
  2. Reduxのpackage.jsonは、npm v5より前にインストールされたノードモジュールとは異なります(_from、_requiredBy、_resolvedなどの接頭辞が付いた追加フィールドもあります)。
  3. 最後に、v5より前にインストールされたモジュールはすべて削除されますが、package.json[〜#〜] and [〜#〜]には余分なフィールドがないためと思われます新しく生成されたpackage-lock.jsonに存在します。

したがって、rm -rf node_modules && npm installを再度実行してもpackage-lock.jsonファイルが原因で問題は解決しません(reduxとその依存関係のみがファイルに保存されたことを覚えていますか?古いpackage-lock.jsonを確認できます)

これが他の誰かに役立つことを願っています。

12
max23_

最後に、2つの手順でこの問題を解決しました。

1)reactjsプロジェクトを作成してreduxをインストールする

2)ステップ1でnode_modulesのすべてのコンテンツをコピーし、現在のreact-nativeプロジェクトに貼り付けます。

アプリをリロードします。すべてがうまく機能します。

0
Robust