关于管理 React node_modules 的建议

Posted

技术标签:

【中文标题】关于管理 React node_modules 的建议【英文标题】:Advice on managing React node_modules 【发布时间】:2018-05-24 12:59:29 【问题描述】:

G'day。我一直在研究一个新的大型应用程序大约一年。在工作过程中,我一直在使用两台相同的机器,一台在工作,一台在办公室。源通过 github 共享。家里的机器与 git 同步,工作的机器做了很多繁重的工作。由于错误和在 Google 上的搜索,我得到的建议(而且似乎很合理)重新安装 React 的供应商开发端,由

rm -rf node_modules
npm install

应用程序陷入尖叫堆,我认为它没有运行的机会!文件 package.json 在一台机器上与另一台机器上是相同的,但是,在仅一台机器上运行 npm install 后,node_modules 中有 4435 个文件不同!

对于版本控制和软件安全来说,这是一场噩梦。包文件不是我手工构建的,npm是在“啊,我需要那个”的过程中做的

npm install redux-form --save

包文件。


  "name": "asset_intel",
  "version": "1.0.0",
  "description": "Application re-write for Asset-IQ Dealer network",
  "main": "index.js",
  "repository": "",
  "scripts": 
    "start": "webpack-dev-server",
    "build": "webpack --config webpack.config.js"
  ,
  "author": "Mark Addinall",
  "license": "ISC",
  "devDependencies": 
    "babel-core": "^6.2.1",
    "babel-loader": "^6.2.0",
    "babel-polyfill": "^6.23.0",
    "babel-preset-es2015": "^6.1.18",
    "babel-preset-react": "^6.1.18",
    "chai": "^3.5.0",
    "chai-jquery": "^2.0.0",
    "jquery": "^2.2.1",
    "jsdom": "^8.1.0",
    "mocha": "^2.4.5",
    "react-addons-test-utils": "^0.14.7",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.0"
  ,
  "dependencies": 
    "axios": "^0.15.3",
    "babel-polyfill": "^6.23.0",
    "babel-preset-stage-1": "^6.1.18",
    "css-loader": "^0.28.4",
    "file-loader": "^0.11.2",
    "lodash": "^3.10.1",
    "prop-types": "^15.5.10",
    "react": "^0.14.9",
    "react-addons-update": "^15.5.2",
    "react-autosuggest": "^9.0.1",
    "react-bootstrap": "^0.31.0",
    "react-bootstrap-autosuggest": "^0.5.0",
    "react-dnd": "^2.4.0",
    "react-dnd-html5-backend": "^2.4.1",
    "react-dom": "^0.14.9",
    "react-dropzone": "^3.13.2",
    "react-hot-loader": "^1.3.1",
    "react-images-uploader": "^1.0.1",
    "react-redux": "^4.0.0",
    "react-redux-modal": "^0.5.2",
    "react-router": "^2.8.1",
    "react-sparklines": "^1.6.0",
    "react-widgets": "^3.4.8",
    "redux": "^3.0.4",
    "redux-accordion": "^1.0.721",
    "redux-ajax": "^1.0.5",
    "redux-form": "^6.5.0",
    "redux-promise": "^0.5.3",
    "redux-tooltip": "^0.7.2",
    "style-loader": "^0.16.1",
    "youtube-api-search": "0.0.5"
  

不是很复杂。我决定将工作的 node_modules 粘贴到 git 中,我想我会将版本粘贴在 package.json 中。

其他人如何在复杂的应用程序中管理此控件?

干杯, 标记。

【问题讨论】:

【参考方案1】:

有几种方法可以解决这个问题:

1。包裹锁

npm(我认为从版本 3 开始,虽然 5+ 更胜一筹)和 yarn 都会自动生成锁定文件,以便新安装将安装上次安装使用的确切版本。

请注意,默认情况下,npm install 上的版本可能仍会发生变化。使用的默认版本范围是 semver-minor (1.1.x),这意味着可以在安装时选择仅更改次要版本的任何更新。这通常很好,因为 semver 规定这些必须是向后兼容的错误修复。不幸的是,一些开发人员没有正确尊重 semver

2。固定依赖版本

package.json 中的版本声明可以通过省略 npm 默认添加的^ 来固定到确切的版本。 More information about version selection and semver here.

3。收缩包装

收缩包装只是具有更高优先级的包锁,通常在发布之前使用。

【讨论】:

【参考方案2】:

我认为,您应该阅读有关包锁的文章:https://docs.npmjs.com/files/package-locks 并使用它,因为在您的情况下,您一次更新了很多库。当您拥有锁定文件时,您的 git 存储库中实际上不需要 node_modules

【讨论】:

以上是关于关于管理 React node_modules 的建议的主要内容,如果未能解决你的问题,请参考以下文章

Webpack + React + TypeScript:未找到模块 ... in ... node_modules/react/

关于React Native报Cannot access ‘serviceOf‘的解决方案

关于React Native Android打包报Duplicate resources错的解决方法

Webpack / Babel / React 构建错误:“未知选项:foo/node_modules/react/react.js.Children”

找不到模块:无法解析“\node_modules\react-addons-perf”中的“react-dom/lib/ReactPerf”

使用 react 框架时 node_modules 文件太多