Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将npm';s";package lock.json";在版本控制下?_Npm_Version Control_Package.json_Package Lock.json - Fatal编程技术网

将npm';s";package lock.json";在版本控制下?

将npm';s";package lock.json";在版本控制下?,npm,version-control,package.json,package-lock.json,Npm,Version Control,Package.json,Package Lock.json,将npm的包锁.json置于版本控制之下有什么意义?根据我的经验,控制此文件的源代码比提高效率带来的麻烦和混乱更多 每次添加/删除/修改任何节点模块的开发人员需要解决分支之间的冲突时,在源代码控制下使用package lock.json会让人非常头疼。尤其是在复杂/大型应用程序上工作,其中package-lock.json可能有数万行长。即使只是吹走节点_模块并运行新的npm安装,也会在包锁中产生剧烈的变化 关于包锁还有几个其他问题: 还有一个GitHub问题,关于包锁的大量对话:

将npm的
包锁.json
置于版本控制之下有什么意义?根据我的经验,控制此文件的源代码比提高效率带来的麻烦和混乱更多

每次添加/删除/修改任何节点模块的开发人员需要解决分支之间的冲突时,在源代码控制下使用
package lock.json
会让人非常头疼。尤其是在复杂/大型应用程序上工作,其中package-lock.json可能有数万行长。即使只是吹走节点_模块并运行新的
npm安装
,也会在包锁中产生剧烈的变化

关于包锁还有几个其他问题:

还有一个GitHub问题,关于包锁的大量对话:

这让我觉得仍然存在广泛的不确定性,需要澄清

根据文件

对于npm修改node_modules树或package.json的任何操作,都会自动生成
package lock.json

那么为什么要将自动生成的文件置于源代码管理之下呢?

上述GitHub问题详细说明了一些人如何响应对package-lock.json的混淆,将他们的
npm安装
脚本更改为
rm-f package-lock.json&&npm安装
,这也感觉不正确


似乎
package lock.json
正在努力成为准确版本的节点模块依赖项的真实来源,但package.json不正是这样做的吗?解决此文件中合并冲突的痛苦何时开始得到回报?

以我的经验,
包锁.json
置于版本控制之下是没有意义的。这使得管理大型合并/重定基准成为一场噩梦。但是,在某些情况下,包锁可能非常有用

最近(2017/10/10)推出了moment.js。意思是,如果一个人在发货时没有包锁。json,并且在他们的包中有类似的东西。json:

“时刻”:“^2.12.0”

版本2.19.0中引入的一些突破性更改会悄悄地渗透到代码中,几乎没有任何痕迹

这就是为什么在切割一个分支作为发布候选之后,关键是:

  • 从.gitignore中删除package-lock.json
  • 运行
    npm install
    生成一个package-lock.json
  • 使用此包锁进行测试、qa和部署

这可确保您的npm模块版本在测试的相同版本上保持锁定状态。

创建.gittributes条目:

# common settings that generally should always be used with your language specific settings

# Auto detect text files and perform LF normalization
* text=auto

#
# The above will handle all files NOT found below
#

#*.svg text
*.lock binary
然后,当您合并时,您只需选择版本与代码合并。我认为这样可能会遇到包冲突


我们通过在构建过程中检查版本来缓解这种情况。

IMO
package lock.json
(或
warn lock.json
)应该始终致力于源代码控制。除了合并/重新基址冲突(这在很大程度上可以通过
warn
BTW得到缓解-您可以
warn安装
mid-rebase来自动解决问题),这是最好的保证,您在提交时的代码将在新签出和安装后正确生成和运行。

锁定版本,这难道不是npm shrinkwrap的目的吗?在一个小版本更新中做一个突破性的改变不也是一个大问题吗?是的,但这只是一个绅士的协议。在现实世界中并不总是如此。锁定文件应始终处于版本控制中,否则您不能有可重复的版本。我同意,锁定文件应提交给版本控制。然而,在运行了
npxcreatereact应用程序之后,我现在看到了一个
包锁.json
,有38k行。这是38000条线路,超过1kb。这对于版本控制来说太大了。显示的.git属性最后一行中的
*.lock
似乎没有意义,因为这是关于
包锁.json
。你是说
package-lock.json binary
吗?我真的很喜欢这个答案作为一个一般概念,但是像@Adrian一样,我认为使用*.lock binary并不完全是你想要的。阅读完本文后,我将尝试在.gittributes文件中使用*lock.json-diff,看看这是否有效。此外,带有*text=auto的行与问题无关。除非大家都同意当前模块需要升级,否则您的团队应该同意在每次代码更改时只遵循package-lock.json中的“当前工作”模块版本。通过这种方式,package-lock.json让每个人都知道需要哪个模块版本,以及“当前正在使用”您的应用程序。