npm install 清除 node_modules 中的 react-native

npm install clear the react-native in node_modules

我在尝试使用 npm installredux 安装到我的 react-native 项目时遇到问题。每当我执行 运行 npm install redux --save 时,node_modules 中的 react-native 目录将被清除。

然后我使用 rm -rf node_modules && npm install 所有 react-native 包都没有安装在里面 node_modules 所以我必须重新创建项目。

我还尝试将 node_modules 中的 react-reduxredux 从另一个项目复制并粘贴到我当前的 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"
    }
}

欢迎任何建议。谢谢

最后,我分两步解决了这个问题:

1) 创建reactjs项目并安装redux

2) 复制步骤1中node_modules的所有内容并粘贴到我当前的react-native项目中。

重新加载应用。一切正常。

很高兴您使用变通方法解决了这个问题,但请允许我解释一下为什么在您 运行 npm install redux --save.

时删除了 react-native 模块

解法:

  1. 将包-lock.json移出项目文件夹(暂时不要删除它,因为稍后需要检查它)
  2. 运行 rm -rf node_modules && npm install
  3. 检查 /node_modules 并且 react-native 现在应该在那里
  4. 运行 npm install redux(npm v5 默认将 --save)安装 redux 而不删除现有模块

什么是套餐-lock.json?

您可以阅读 npm v5 的一系列更改 here。其中之一是在 npm 修改 /node_modules 或 package.json 时生成 package-lock.json(锁定文件)。

使用 package-lock.json,任何运行 npm install (v5) 的人都将获得与您正在开发的完全相同的 node_modules 树。所以,你也必须提交这个文件。

为什么 react-native 模块和其他模块在 运行 npm install somePackageName 之后被删除,即使它们在 package.json?

删除是因为您现有的节点模块是在 npm v5 之前安装的。如果您使用 npm v5 安装模块(例如 npm install redux),您会注意到三件事:

  1. package-lock.json 将生成(或更新,如果存在)。 Redux 和它的依赖被保存到里面。
  2. redux 的 package.json 不同于 npm v5 之前安装的节点模块(一些额外的字段以 _ 作为前缀,例如 _from、_requiredBy、_resolved 等)。
  3. 最后,v5 之前安装的任何模块都将被删除,我猜这是由于其 package.json AND 中缺少的额外字段在新生成的模块中不存在包裹-lock.json.

所以,运行 rm -rf node_modules && npm install 再次解决不了问题,因为 package-lock.json 文件(记得只有 redux 和它的依赖被保存到文件中吗?你可以检查旧包-lock.json)

希望这可能对其他人有所帮助。

如果您使用 yarn 创建应用程序,它会被删除。如果您使用 yarn 创建了应用程序,请 运行 yarn add react-redux 而不是 npm install react-redux