天儿真好。我已经在一个新的,大型的应用程序上工作了大约一年。在工作过程中,我一直在使用两台相同的机器,一台在工作,一台在办公室。源通过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中。
其他人如何在复杂的应用程序中管理此控件?
干杯, 标记
答案 0 :(得分:3)
我认为,您应该阅读有关包锁的文章:https://github.com/yihui/hugo-xmin/pull/7并使用它,因为在您的情况下,您一次更新了很多库。当您拥有锁定文件时,实际上您的git存储库中不需要node_modules
答案 1 :(得分:1)
有几种方法:
两个npm(我认为从版本3开始,虽然5+更好)并且yarn会自动生成锁定文件,以便新安装将安装上次安装使用的确切版本。
请注意,默认版本可能会在npm install
上更改。使用的默认版本范围是semver-minor(1.1。 x ),这意味着可以在安装时选择仅更改次要版本的任何更新。这通常很好,因为semver规定这些必须是向后兼容的错误修复。不幸的是,一些开发人员不能正确尊重semver
package.json
中的版本声明可以通过省略npm默认添加的^
来固定到精确版本。 More information about version selection and semver here
收缩包装只是具有更高优先级的包锁,通常在发布之前使用。