您可以在运行 npmpublish 之前检查 npm 版本号是否有效吗?

问题描述 投票:0回答:2

显然,如果您尝试

npm publish
而不更新模块的版本号,您将收到错误。 有什么方法可以在实际运行之前验证版本号是否可以发布有效
npm publish

我的用例:当推送到任何 git 分支时,我使用 CircleCI 来构建我的模块。 如果有人创建了 master 的拉取请求,我想验证版本号是否已更新。 但是,在接受 master 的拉取请求之前,我不想实际发布包。

node.js npm continuous-integration
2个回答
11
投票

您可以通过以下方式获取当前包版本:

npm view <pkg> version
(npm v5),然后将其与代码中的版本进行比较。

很容易检查版本是否有变化,一个简单的

===
就足够了。如果您需要检查新版本是否有效,您应该使用 Look for a module 来进行检查。

https://www.npmjs.com/package/semver 例如,如果您使用 JS 代码来检查,或者 https://github.com/cloudflare/semver_bash 如果您使用 bash


0
投票

参加聚会有点晚了,但我想让 @kkkkkkk 的过程自动进行,并在 CI/CD 中失败/通过

这是我想出的脚本:

version-check.mjs

import fs from "node:fs";

if (!process.argv[2] && !process.argv[3]) {
  console.log("Missing input");
  process.exit(1);
}

if (process.argv[3].includes("package.json") === false) {
  console.log("The second argument should be the path to package.json");
  process.exit(1);
}

const loadJSON = (path) =>
  JSON.parse(fs.readFileSync(new URL(path, import.meta.url)));

const pkg = loadJSON(process.argv[3]);

if (process.argv[2] === pkg.version) {
  console.log("Failure");
  process.exit(1);
}
process.exit(0);

这个想法是你用两个参数调用这个脚本:第一个是 npmjs 的版本,第二个是 package.json 的路径。

然后您可以(在 bash 中)以这种方式调用脚本:

node version-check.mjs "$(npm view @your/package version)" ./package.json
© www.soinside.com 2019 - 2024. All rights reserved.