npm版本添加alpha后缀

时间:2016-08-29 12:13:57

标签: node.js npm semantic-versioning

如何使用npm版本化来阻止package.json版本包含-alpha

运行npm version <new version>会破坏package.js文件的版本,但是我想在版本中添加-alpha postfix,但我无法在文档中说明,但它由semver本身支持。

实际结果:

> npm version prerelease
> v0.2.1-1

预期结果:

> v0.2.1-alpha

2 个答案:

答案 0 :(得分:6)

我不知道如何自动设置0.2.1-alpha,但是可以使用0.2.1-alpha.0。 npm支持--preid选项以指定预发行版本的前缀。它可以与pre*版结合使用。

示例1。制作下一个主要版本的Alpha:

# 1.2.3 => 2.0.0-alpha.0
npm version premajor --preid alpha

示例2。将alpha链接到beta:

# 2.0.0-alpha.0 => 2.0.0-beta.0
npm version prerelease --preid beta

一旦创建了预发行版,就可以使用prerelease参数来增加数字。

# 2.0.0-beta.0 => 2.0.0-beta.1
npm version prerelease

答案 1 :(得分:2)

虽然-alpha和-beta是常见的预发行标签,但它们不是SemVer定义的。 -alpha1、1,-alpha2,-beta.1等也很常见。规范将预发行标签定义为一系列由点分隔的字母数字或数字字符字段。在某些示例中,SemVer规范使用alpha和beta,但规范未定义它们。如果您不告诉NPM,NPM无法知道您要使用哪个标签。它显然默认为数字预发行标签,这很有意义,因为SemVer允许(-1,-2,-3提供所有必要的语义)。

NPM文档很烂,而且幸运的是,我从未使用过NPM。参见https://docs.npmjs.com/cli/version。特别是:

  

newversion参数应该是有效的semver字符串,semver.inc的有效第二个参数(补丁,次要,主要,预补丁,次要,主要,预发行版之一)或from-git。

看提供的链接(https://github.com/npm/node-semver#functions),他们似乎是在指增加指定的版本字段。在package.json文件的版本字符串中缺少alpha标记的情况下,将丢失的数字prerelease标记附加为-1非常有意义。

我刚刚用以下方法验证了这一理论:

> echo Test > test.txt
> npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (packageTest)
version: (1.0.0) 0.1.0-alpha.0
description: Test package.
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\TMP\Joseph\packageTest\package.json:

{
  "name": "packageTest",
  "version": "0.1.0-alpha.0",
  "description": "Test package.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

> npm version prerelease
v0.1.0-alpha.1

> cat package.json
{
  "name": "packageTest",
  "version": "0.1.0-alpha.1",
  "description": "Test package.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

符合预期。