node.js - 我应该依赖 package.json 还是对我的 Node 模块进行版本控制?

标签 node.js react-native version-control node-modules package.json

最近在做react-native的项目。我做了一个旧项目,我想将它克隆到一个新项目中,这样我就可以在旧版本之上开发一些新的东西,但不会影响旧项目本身。

我发现,每次我使用相同的 package.json 执行 npm install 时,安装的 node_modules 文件夹可能不相同。这可能是因为我们在某些模块的版本前面有前缀,^~。此外,安装的模块也有自己的依赖项,可以自行更新。

于是,问题就来了。我应该使用 package.json 来进行版本控制吗?

根据这里:Why do we need to use package.json? ,它说 package.json 为人们提供了一种简单的方法来跟踪他们在应用程序中使用的包。

但是,如果 package.json 总是自行更新项目而不考虑不同模块的兼容性,我如何对我的项目进行版本控制。

我想到的唯一解决方案是:我们应该对 node_modules 进行版本控制。如果是这样,package.json 是不是就没有意义了?

那么,我想知道在node_modulespackage.json相关项目上做版本控制的行业惯例是什么?

最佳答案

如果您使用的是 5 之前的 NPM 版本,那么您应该查看 NPM Shrinkwrap .这会锁定您当前使用的 NPM 模块的版本。如果其他人 npm install 投入项目,他们将获得收缩包装中指定的确切版本。

npm-shrinkwrap
Lock down dependency versions for publication

随着 NPM 5 的发布默认情况下,当您运行 npm install 时,它会自动创建一个 package-lock.json 文件,类似于 shrinkwrap。您应该将锁定文件或 shinkwrap 文件提交给您的 SCM。

您还应该查看 Yarn . Yarn 开箱即用,带有一个 yarn.lock 文件,该文件以相同的方式工作,但具有更高的性能速度和离线功能。

Using a detailed, but concise, lockfile format, and a deterministic algorithm for installs, Yarn is able to guarantee that an install that worked on one system will work exactly the same way on any other system.

如果您已经有一个项目和 node_modules 文件夹,并且希望在不重新安装所有模块的情况下更改为 Yarn,那么您可以运行 yarn import 这将生成一个锁基于当前 Node 模块文件夹的文件。

上述两种解决方案都意味着您不应该要求将 node_modules 添加到 SCM - 当不同平台(windows、mac 等)上的用户在项目上工作时,这样做会增加其他复杂性.锁定文件应与您的项目一起提交。

关于node.js - 我应该依赖 package.json 还是对我的 Node 模块进行版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44699757/

相关文章:

javascript - Jest 报告测试通过,即使 expect 断言失败

javascript - react - 使用 react-table 超出最大更新深度

version-control - hg 更新导致 merge 失败

git fork repo 到同一个组织

node.js - 在 AppFog 上,如何在终端 (node.js) 上查看控制台日志

node.js - Nodemailer错误: connect ECONNREFUSED

reactjs - React - 违反不变性 : Maximum update depth exceeded

javascript - react native 扫描蓝牙设备

mysql - 切换分支时如何恢复相同的数据库?

node.js - 设置本地heroku环境变量的问题