当 npm 忽略的文件被更改并发布到 GitHub 时,是否需要将包发布到 npm?

Is publishing a package to npm necessary when a file that is ignored by npm is changed and published to GitHub?

该项目包含一个被 npm 忽略但未被 GitHub 忽略的测试文件夹。当 test 文件夹下的文件发生变化时,是否也应该发布到 npm 以保持版本匹配?另外,在那种情况下,应该增加语义版本控制,而 npm 没有变化。


假设 GitHub 中有一个 repo,它有一个被 npm 忽略的测试文件夹。它还具有 package.json 文件,该文件跟踪存储库中的版本号。

Q1。当test文件夹下的文件发生变化时,是否应该增加补丁版本号?

Q2。不知何故(如果 Q1 的答案是肯定的,就像第一个问题一样,但可能还有其他类似的情况),当 package.json 文件中发生次要版本增加时,但 npm 上的文件中没有任何更改边,应该怎么办?

最后编辑在前:

对您的问题的简短回答是否定的。回购将领先于您的提要中发布的任何内容,直到您剪切新版本。


所以这里的问题是您显然在您的存储库中的文件中或在提交中跟踪版本号 labels/tags。不要那样做,没有意义。我知道这是一种非常普遍的做法(我自己也犯过这个错误),但它是出于懒惰的想法。回购不是跟踪这类事情的正确数据库。只有已发布的包才需要有任何类型的版本标签。数据流应该来自 repo => build system => package repository。箭头永远不能反转。

当您应用该规则时,您的问题就没有实际意义了。您的测试内容是与您的发布内容 (NPM) 不同的包提要。它已经有 repo 哈希,这些哈希是唯一的、明确的和不可变的。这些哈希值应该流向构建系统,然后流向包 feed/repository 系统。


测试和产品开发之间的发行 date/time 邮票始终存在差异。产品发布总是滞后于测试发布。特定版本测试套件的目的是验证产品发布。所以你应该总是看到测试套件 X.Y.Z+repoHashN,在产品版本 X.Y.Z+repoHashN 之前。请注意,测试和产品的 X、Y 和 Z 值不需要具有相同的值(产品补丁,可能是修复测试套件出现的已知错误的结果),但应该始终有一个 'repoHashN' 唯一匹配测试版本三元组和产品版本三元组。


您从同一个存储库生产两个产品,一个应用程序和一个测试套件,并且大多数工具都跟踪每个分支的版本,该版本应用于从该分支生成的所有包。我无法直接解决任何特定的 NPM 行为问题,我没有充分使用它,但我相当确定您没有遇到错误,而您很可能使用不正确。

由于您的两个产品的开发节奏不同,您应该考虑维护一个测试分支以对测试代码进行版本控制。这里的工作流似乎有无穷无尽的可能性。

我建议使用 master 或 main 分支作为所有开发的尖端。总是从这个分支中删除预发布 (-<#>+master.<repoHash>) 版本,你也可以只修改补丁号或预发布标签号(NPM 支持这两种情况)。然后,当你准备好削减一个版本时,你将 master 或 main 分叉到一个发布分支(以目标 major.minor 版本命名)并且只从该分支中​​削减发布包。因为您的测试代码版本与发布包版本无关,所以您不需要专门跟踪它,当您从 main/master 或 test/dev 分支合并以剪切下一个补丁级别版本时,它总是会更新.发布分支的补丁级别只有在您准备好将其发布到 public.

时才会增加

在测试分支中进行测试开发以隐藏不需要显示在 master/main 历史记录中的流失。那里不需要十几个“BUG:### WIP”条目,因此您可以压缩从测试到主控或主控的合并。产品代码开发也是如此。在 Dev 分支中执行此操作。测试和开发分支应该只剪切带有类似 -<#>+<devNam>.<repoHash> 标签的包,并且只发布到私人提要。

master/main 分支的目的是提供频繁(至少每天)的构建和测试周期,其中包括来自测试和开发分支的合并内容。这是您维护基本事实的地方。在任何给定时间,您应该能够安全地从这里分叉出一个新分支,并依靠它来构建满足您的质量规格的产品。这使您可以自由地以您需要的任何节奏削减发布分支,而与测试或开发分支的当前状态无关。测试和开发人员应该尝试将他们的工作合并到 master 或 main 中,至少每天一次,并立即修复任何合并冲突或构建失败。

在test == dev的情况下,你可以将它们合并成一个分支。通常,每个开发人员都会有很多分支在进行中,用于独立完成各种任务。让它们直接合并到 main 或 master 是一个有效的工作流程,甚至在许多商店中被认为是最佳实践。然而,有时候,厨房里的厨师太多会导致问题,并且当您发现您的开发人员花费太多时间来解决与 master 或 main 的合并冲突时。您需要为不同的工作线创建单独的分支,以便他们在掌握工作之前将他们的工作分阶段进行。然后流入 master 或 main 就不是那么随机了,而且会更容易管理。