当前位置: 首页 > 面试题库 >

bower(和npm)版本语法是什么?

终祯
2023-03-14
问题内容

Bower使我可以使用以下语法来指定软件包的版本要求:

"dependencies": {
  "<name>": "<version>",
},

但是我无法找到用于的语法<version>。我知道我可以将版本指定为:

  • 大于某个版本 ">1.0.0"
  • 大于或等于版本: ">=1.0.0"
  • 或在一定范围内:"1.0.0 - 2.0.0"

我也知道有一个通用的语法包含波浪号:"~1.0.0"。但是我不确定这意味着什么以及它是否与相同"=1.0.0"

我也很想知道我是否能够指定多个非连续版本,例如完全1.0.3大于的加号1.5.0,等等。


问题答案:

简而言之,Bower版本号(和NPM的)的语法称为SemVer,它是“语义版本控制”的缩写。您可以在Node /
npm内semver解析器
的API上找到Bower和NPM中使用的SemVer详细语法的文档。您可以在semver.org上了解有关基础规范的更多信息(
提及~或其他语法详细信息)。

您可以使用一个超级方便的可视化算法计算器,使所有这些更容易理解和测试。

SemVer不只是一种语法!关于发布API的正确方法,有很多有趣的事情要说,这将有助于理解语法的含义。至关重要的是:

识别公共API后,您将以版本号的特定增量传达对它的更改。 考虑XYZ(Major.Minor.Patch)的版本格式
。不影响API的错误修复程序会增加补丁程序版本,向后兼容的API添加/更改会向后增加次要版本,向后不兼容的API更改会导致主版本。

因此,您的特定问题~与该Major.Minor.Patch模式有关。(和相关的插入号运算符一样^。)您可以使用~将想要接受的版本范围缩小到以下任一:

  • 随后对相同次要版本的 补丁程序级别 更改( “不影响API的错误修复” ),或:
  • 随后对同一主版本的 次要 更改( “向后兼容的API添加/更改”

例如:为了表明您将在1.2.x树上进行任何后续的补丁程序级更改,从1.2.0开始,但小于1.3.0,可以使用:

"angular": "~1.2"
  or:
"angular": "~1.2.0"

这也为您提供与使用.x语法相同的结果:

"angular": "1.2.x"

但是,您可以使用tilde / ~语法来更加具体:如果您只愿意接受 从1.2.4开始 但仍小于1.3.0的补丁程序级更改,则可以使用:

"angular": "~1.2.4"

如果使用的话,向左移,移向 主要 版本。

"angular": "~1"

…与…相同

"angular": "1.x"
  or:
"angular": "^1.0.0"

…并匹配高于1.0.0且低于2.0的任何次要或补丁级别的更改:

请注意,上面的最后一个变体:称为 “插入符范围” 。插入符号看起来非常像a >,因此您会以为它的意思是“任何 大于
1.0.0的版本”。(我当然对此有所遗漏。)

插入符范围基本上是用来表示您
关心最左边的有效数字(通常是主版本),并且您将允许不影响该最左边的数字的任何次要或补丁级别的更改。但是,与指定主要版本的代字号范围不同,插入符范围可让您指定精确的次要/音色起点。因此,同时^1.0.0 === ~1,插入符号范围(例如)^1.2.3可以让您说您将进行任何更改>=1.2.3 && <2.0.0。您无法使用波浪号范围来做到这一点。

当您近距离观察时,所有这些乍一看似乎令人困惑。但是请稍等一会,然后以这种方式进行思考: 插入符号只是让您说出您最担心最左边的有效数字。
代字号可以让您说出您最担心哪个数字最右边。
剩下的就是细节。

代字号和插入号的表达能力解释了为什么人们使用它们而不是使用更简单的.x语法:它们只是让您执行更多操作。这就是为什么即使在.x需要使用的地方也会经常使用波浪号的原因。例如,请参阅npm本身:它自己的package.json文件包含许多~2.4.0格式依赖关系,而不是2.4.x
可以 使用的格式。坚持使用~,无论在哪个开头的补丁程序编号可接受的情况下,语法在70多个版本依赖关系的列表中始终保持一致。

无论如何,SemVer还有更多功能,但是我不会在这里详细说明。在节点semver软件包的自述文件中进行检查。并且在练习并尝试掌握SemVer的工作原理时,请 务必使用
语义版本控制计算器

RE:非连续的版本号:OP的最后一个问题似乎是关于指定非连续的版本号/范围(如果我进行了合理的编辑)。是的,您可以使用通用的双管道“或”运算符:||。像这样:

"angular": "1.2 <= 1.2.9 || >2.0.0"


 类似资料:
  • 问题内容: 和之间的根本区别是什么?只需要简单明了的东西。我已经看到一些同事在他们的项目中使用和互换使用。 问题答案: 所有程序包管理器都有许多缺点。您只需要选择可以与之共存的地方即可。 History npm开始管理node.js模块(这就是默认情况下会放入软件包的原因),但是当与Browserify或webpack结合使用时,它也适用于前端。 Bower是专门为前端创建的,因此考虑到了优化。

  • 问题内容: 我必须将npm应用程序的版本从0.1更改为0.0.1,以使npm不能执行此操作。 为了完整性,这里是工作的json 出现错误时,版本以前是“ 0.1”。 这是某种需要3套版本号的API / ABI兼容性版本控制概念吗?为什么错误消息对此不友好? 问题答案: 是的,这对于语义版本控制是必需的,这是npm软件包使用的版本控制方案。这是来自的片段: 版本必须可由node-semver解析,该

  • 本文向大家介绍npm 语义版本控制详解,包括了npm 语义版本控制详解的使用技巧和注意事项,需要的朋友参考一下 场景引入 开发时,经常需要依赖一些模块(包),我们进行了下载之后,便一直在该版本的模块环境下进行开发,但是线上的服务器(其他开发者)一般都是根据依赖来配置文件,重新下载各个模块,但是保不齐某个模块的版本已经更新了,这时线上的包会更新到最新的版本,但你的代码还是依据老版本来写的,这时可能会

  • 我试图在ubuntu服务器上安装npm和nodejs,但注意到不知何故,在运行后,我最终得到了两个版本。我知道这一点,因为当我运行时,它会返回,而当我运行时,它返回。在我继续之前,我想把这个设置好。有人明白我为什么会有两个版本吗?我的理解是,安装nodejs也应该安装npm,但这只允许我以更高的权限运行npm,我知道我不应该这样做。谁能让我知道我做错了什么?谢谢你。

  • 我对此进行了广泛的研究,但一无所获。所以我希望这能产生一个不同的解决方案。 我一直收到这个错误 这不是一台Mac,而是一台Windows机器,所以与sudo无关,因为这里有其他的回应 我没有运行杀毒软件,所以这也是一个禁区 我运行了,正如这里建议的和其他SO解决方案 它运行得很好,当我尝试安装angular ui引导程序时,它开始这样做。但是我可以很好地安装其他依赖项。 我还做了: 重启了我的机器

  • 在OSGi bundles中,用一个版本号导出和导入包。包仍然定义了一个版本。这在我看来是多余的。