关于管理 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”