有关管理React node_modules

时间:2017-12-11 02:10:34

标签: node.js git reactjs react-redux node-modules

天儿真好。我已经在一个新的,大型的应用程序上工作了大约一年。在工作过程中,我一直在使用两台相同的机器,一台在工作,一台在办公室。源通过github共享。家里的机器与git同步,机器在工作中做了很多繁重的工作。由于存在错误并在Google上搜索,我通过

重新安装React的供应商开发方面的建议(并且似乎是合理的)
rm -rf node_modules
npm install

应用程序陷入尖叫堆中,我认为它没有机会运行!文件package.json在一台机器上是相同的,但是,在一台机器上运行npm安装后,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中。

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

干杯, 标记

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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。包覆面

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