显然,如果您尝试
npm publish
而不更新模块的版本号,您将收到错误。 有什么方法可以在实际运行之前验证版本号是否可以发布有效npm publish
?
我的用例:当推送到任何 git 分支时,我使用 CircleCI 来构建我的模块。 如果有人创建了 master 的拉取请求,我想验证版本号是否已更新。 但是,在接受 master 的拉取请求之前,我不想实际发布包。
您可以通过以下方式获取当前包版本:
npm view <pkg> version
(npm v5),然后将其与代码中的版本进行比较。
很容易检查版本是否有变化,一个简单的
===
就足够了。如果您需要检查新版本是否有效,您应该使用 Look for a module 来进行检查。
https://www.npmjs.com/package/semver 例如,如果您使用 JS 代码来检查,或者 https://github.com/cloudflare/semver_bash 如果您使用 bash
参加聚会有点晚了,但我想让 @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