我应该依赖 package.json 还是对我的节点模块进行版本控制?
Should I rely on package.json or keep version control on my node modules?
最近在做react-native的项目。我做了一个旧项目,我想将它克隆到一个新项目中,这样我就可以在旧版本之上开发一些新东西,但不会影响旧项目本身。
我发现每次我用相同的 package.json 执行 npm install
时,安装的 node_modules
文件夹可能不相同。这可能是因为我们在某些模块的版本前面有前缀 ^
或 ~
。另外,安装的模块也有自己的依赖,可以自己更新。
于是,问题就来了。我应该使用 package.json 来进行版本控制吗?
根据这里:Why do we need to use package.json?,它说package.json provides a simple way for people to keep track of packages they use in their application.
但是,如果package.json
总是自己更新项目而不考虑不同模块的兼容性,我如何对我的项目进行版本控制。
我想到的唯一解决方案是:我们应该在 node_modules 上进行版本控制。那样的话,package.json是不是就没有意义了?
所以,我想知道在 node_modules
和 package.json
相关项目上进行版本控制的行业惯例是什么?
如果您使用的是 5 之前的 NPM 版本,那么您应该查看 NPM Shrinkwrap。这会锁定您当前使用的 NPM 模块的版本。如果其他人 npm install
投入项目,他们将获得收缩包装中指定的确切版本。
npm-shrinkwrap
Lock down dependency versions for publication
随着 NPM 5 的发布,它会自动创建一个 package-lock.json
文件,类似于 shrinkwrap,默认情况下当您 运行 npm install
时。您应该将锁定文件或 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_modules
添加到 SCM - 当用户使用不同平台时,这样做会增加其他复杂性(windows、mac、等)正在从事该项目。锁定文件应与您的项目一起提交。
最近在做react-native的项目。我做了一个旧项目,我想将它克隆到一个新项目中,这样我就可以在旧版本之上开发一些新东西,但不会影响旧项目本身。
我发现每次我用相同的 package.json 执行 npm install
时,安装的 node_modules
文件夹可能不相同。这可能是因为我们在某些模块的版本前面有前缀 ^
或 ~
。另外,安装的模块也有自己的依赖,可以自己更新。
于是,问题就来了。我应该使用 package.json 来进行版本控制吗?
根据这里:Why do we need to use package.json?,它说package.json provides a simple way for people to keep track of packages they use in their application.
但是,如果package.json
总是自己更新项目而不考虑不同模块的兼容性,我如何对我的项目进行版本控制。
我想到的唯一解决方案是:我们应该在 node_modules 上进行版本控制。那样的话,package.json是不是就没有意义了?
所以,我想知道在 node_modules
和 package.json
相关项目上进行版本控制的行业惯例是什么?
如果您使用的是 5 之前的 NPM 版本,那么您应该查看 NPM Shrinkwrap。这会锁定您当前使用的 NPM 模块的版本。如果其他人 npm install
投入项目,他们将获得收缩包装中指定的确切版本。
npm-shrinkwrap
Lock down dependency versions for publication
随着 NPM 5 的发布,它会自动创建一个 package-lock.json
文件,类似于 shrinkwrap,默认情况下当您 运行 npm install
时。您应该将锁定文件或 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_modules
添加到 SCM - 当用户使用不同平台时,这样做会增加其他复杂性(windows、mac、等)正在从事该项目。锁定文件应与您的项目一起提交。