问题标签 [semantic-versioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在不更改版本的情况下检测不兼容的 API 更改
我在Java - Maven - Jenkins
项目上使用语义版本控制,因此,每当完成不兼容的 API 更改时,都应该更改产品的主要版本。我正在寻找一种自动化的方式来检测这种变化,这样如果发生这种变化,maven 构建就会失败(或者甚至自动增加版本)。谷歌搜索让我正在编写自己的maven enforcer plugin
规则,但我想问是否有人知道任何可以提供帮助的工具(Jenkins
插件或类似工具也可以)。
python - 我应该固定我的 Python 依赖项版本吗?
我即将发布一个我过去几周一直在研究的 Python 库。我已经阅读了很多关于 Python 依赖项的内容,但还不太清楚:
有些人假装你永远不应该固定你的依赖版本,因为它会阻止你的库的用户升级这些依赖。
其他一些人声称您应该始终固定您的依赖项版本,因为这是保证您的版本按照开发时的方式工作的唯一方法,并防止依赖项中的重大更改对您的库造成严重破坏。
我不知何故选择了一个混合解决方案,我假设我的依赖项使用语义版本控制并且只固定主要版本号somelib >= 2.3.0, < 3
(0
比如即使只是补丁号被撞)。
截至目前,我不确定哪种方式是最好的。是否有官方指南(甚至可能是 PEP?)规定了有关 Python 依赖项的最佳实践以及如何指定它们?
version-control - 我应该在发布后还是每次提交时增加版本
我们想在我们的流程中实现语义版本控制,我们在 1.0.0 版本中,我们添加了两个新功能。我们将尽快提供这些功能。
问题是:我们应该将下一个版本命名为 1.1 还是应该将其命名为 1.2,因为我们已经创建了两个新函数。
一般来说,如果我们添加n 个新函数,我们应该将版本的次要组件增加n,还是每次交付时只增加 1?
ruby - Ruby 生态系统中 Semver 的替代方案
在红宝石生态系统(或什至其他地方)中是否有SemVer的功能(即,我可以将其与bundler
and一起使用rubygems
)替代方案?
我对SemVer ( MAJOR.MINOR.PATCH ) 的问题是它试图量化两个不兼容的东西:
- 改变大小(补丁——一个小改变)
- 向后兼容性(次要——不间断,主要——破坏)
但是, PATCH仍然很可能是一个重大更改,这使得它在某种程度上等于MAJOR而小于MINOR,并且MINOR小于MAJOR。所以:
这意味着 PATCH <> MINOR 同时存在,这永远不会是真的。
理想情况下,我希望有两条版本控制线——一条基于向后兼容性(例如,没有破损、潜在难以察觉的破损(==补丁)、破损),另一条基于更改大小(不考虑向后兼容性),一个人性化的版本控制线,如果你愿意的话。我希望能够同时使用它们。
(仅通过纯粹的基于向后兼容的版本控制,只要操作系统从在屏幕上写入“hello world”开始,我就可以从“hello world”转到操作系统。)
例如:如果H代表对人类友好的版本控制,而B代表向后兼容性,即基于向后兼容性的版本,那么我想说:
- ~> H2.0 (==坚持 H2.X;如果你制作的 H3.0 版本增加了 200MB 的非破坏性附加功能,我不想让你下载它,但请给我带来你所做的那些非破坏性改进H2.0 线)
- ~> B0.1(==给我非破坏性更改(第 3 列,相当于 Semver 的第 2 列)和可能难以察觉 的破坏性更改(第 2 列,相当于 SemVer 的第 3 列))
git - 在 GitHub 上分叉一个 repo,但使用我们自己的语义版本控制标签?
免责声明
我们的团队已经在工作项目中使用 git 大约两年了,但我们从未分叉过其他项目,所以我们在贡献部分相当新。
我们的情况
我们想分叉一个存储库并将其用作我们自己项目的起点。首先,我们想修改一些代码以适应我们自己的需求,但如果我们想出一些有用的东西,我们也想回馈原始项目。
问题
我们面临的问题是我们想为我们的项目使用语义版本控制并从 开始v1.0.0
,但是原始存储库也使用语义版本控制,所以已经有一个v1.0.0
标签。
有什么方法可以让我们在原始存储库中维护我们自己的语义版本控制,而不会失去为原始项目做出贡献的能力?或者我们的贡献是完全错误的,我们应该以不同的方式做事吗?
git - 带有 Semver 补丁的 Gitflow/对早期标签的小更新
将补丁或次要更新应用于先前发布的版本/标签(使用 semver)的 gitflow 流程/流程是什么?
例如:
软件的master/main分支有最新的tag/v2.0.0版本;但是,需要对版本 v1.0.0 应用补丁/次要更新,这应该会在 v1.0.1 上对 v1 的软件进行最新更新。补丁/次要更新也必须应用于 v2.0.0,在主 v0.2.1 上制作最新标签。
javascript - ES5 - 从 src 路径解析脚本版本
我希望有人已经完成了这项工作,但我想做的是输出各种 javascript 库的语义版本列表。假设我有以下输入:
- https://code.jquery.com/jquery-2.1.3.js
- //maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css
- https://cdnjs.cloudflare.com/ajax/libs/1140/2.0/1140.css
- https://cdnjs.cloudflare.com/ajax/libs/Base64/0.3.0/base64.min.js
- https://cdnjs.cloudflare.com/ajax/libs/angular-google-maps/2.1.0-X.10/angular-google-maps.min.js
- https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/2.1.8-M1/swagger-ui.min.js
- https://cdnjs.cloudflare.com/BLAH/BLAH.min.js
我想对这些字符串中的每一个调用一个函数,并让它从路径中输出 semver:
- 2.1.3
- 3.3.4
- 1140 或 2.0(首选)
- 0.3.0
- 2.1.0-X.10
- 2.1.8-M1
- 无效的
我无法找到任何现有的库,并希望有人能方便地使用 IE9ish。
versioning - 数据库模式更改是否应该增加语义版本控制中的主要版本?
为了让这个系统正常工作,您首先需要声明一个公共 API
我的 Web 应用程序没有公开任何公共 API,但是它使用数据库。数据库模式是否可以被视为公共 API,然后数据库模式的更改是否应该增加主要版本?
node.js - npm 嵌套依赖不是最新版本
在我的 Node.js 项目中,我有一个依赖项gulp
,该依赖项vinyl-fs
具有一个依赖项,该依赖glob-watcher
项具有一个依赖项gaze
。glob-watcher
is version0.0.6
的gaze
依赖项设置为^0.5.1
.
根据这篇文章,^
(插入符号)表示接受最新的次要版本。所以我希望glob-watcher
安装最新的次要版本gaze
,(在撰写本文时)是0.6.4
. 但它没有,只有0.5.1
安装。
问:为什么?我该如何解决?
我尝试将以下内容添加npm-shrinkwrap.json
到我的项目根目录并运行rm -rf node_modules/ && npm install
:
确实如此,所以gaze
安装了我想要的版本,但不幸的是,该配置导致仅安装了这 4 个依赖项。我可以指定我的整个依赖树来解决这个问题,但这是不可取的,特别是因为我只想覆盖那个包。(但根据所谓的行为,似乎甚至不需要覆盖^
。)
显然,我也可以cd
为该依赖项编写一个 shell 脚本并手动npm install
获得我想要的版本,但如果有的话,我宁愿以“正确”的方式执行此操作。
任何帮助将不胜感激。