web-dev-qa-db-fra.com

Existe-t-il des identifiants de version préliminaire de npm?

Il y a un très pratique npm version commande. Outre les arguments comme major, minor et patch, il accepte des arguments comme prerelease, prepatch, etc.
Il est dit dans la documentation que les commandes fonctionnent conformément à semver.inc fonction.

Ces pre commandes sur lesquelles j'ai une question.

Disons que je suis actuellement à la version v1.0.0.
Si je lance npm version prerelease il basculera la version en v1.0.1-0.

Est-il possible de fournir un agrément supplémentaire pour un identifiant de pré-diffusion selon https://github.com/npm/node-semver#prerelease-identifiers ?

Je souhaite quelque chose comme npm version prerelease alpha remplacerait la version par v1.0.1-alpha.0 mais cela ne fonctionne pas.

20
timetowonder

À partir de npm 6.4. vous pouvez utiliser le --preid option de npm version comme ça:

$ npm version prerelease --preid=alpha
v0.1.1-alpha.0
$ npm version prerelease --preid=alpha
v0.1.1-alpha.1
$ npm version prerelease --preid=alpha
v0.1.1-alpha.2
28
MondKin

J'ai regardé cela récemment pour voir s'il y avait des mises à jour à ce sujet ... mais il semble que les choses soient toujours les mêmes.

Non, aucun identifiant de version préliminaire de npm n'est pris en charge par la commande npm version. Vous pouvez voir le raisonnement de l'équipe ici: https://github.com/npm/npm/pull/12936#issuecomment-24815374

semver ( https://www.npmjs.com/package/semver ) prend en charge ce que vous essayez de faire, donc ce que vous pouvez faire est d'obtenir la version avec une commande comme celle-ci:

semver <current version> -i prerelease --preid <prelease identifier>

par exemple:

semver 1.0.1 -i prerelease --preid alpha

produira:

1.0.2-alpha.0

Avec ce résultat, vous pouvez le passer à la version npm (par exemple dans une build CI), comme ceci:

npm version <resulting version from semver command>

Une autre alternative consiste à utiliser la version sémantique (un projet indépendant): https://github.com/semantic-release/semantic-release

Cela automatisera le versioning sémantique basé sur les messages de commit, mais je pense que cela ne fonctionne qu'avec les modules hébergés par github repo, je n'en suis pas sûr.

2
Hellmut Adolphs

Comme l'autre réponse mentionnée, cela n'est pas pris en charge par npm pour la raison mentionnée dans ce commentaire

Mais vous pouvez obtenir le même résultat en utilisant le package semver et les scripts npm en ajoutant quelque chose comme ce qui suit au package.json

"scripts": {
  "beta-version-patch": "npm version $(semver $npm_package_version -i prerelease --preid beta)",
  "beta-version-minor": "npm version $(semver $npm_package_version -i preminor --preid beta)",
  "beta-version-major": "npm version $(semver $npm_package_version -i premajor --preid beta)",
  "rc-version": "npm version $(semver $npm_package_version -i prerelease --preid rc)",
  "final-release": "npm version $(semver $npm_package_version -i)"
}

et courir npm run beta-version-patch

Pour être plus générique, vous pouvez utiliser les éléments suivants:

"scripts": {
  "semver": "npm version $(semver $npm_package_version -i $release --preid $preid)"
}

et exécutez des commandes comme:

release=prerelease preid=alpha npm run semver
release=prerelease preid=beta npm run semver
release=premajor preid=alpha npm run semver
1
Anand S