@elora-cloud/elora-cli
Version:
elora build cli 前端打包脚手架
134 lines (128 loc) • 5.13 kB
JavaScript
;
var path = require('node:path');
var node_url = require('node:url');
var findpkg = require('find-package-json');
var prompts = require('prompts');
var releaseIt = require('release-it');
var index = require('../../common/index.cjs');
var constant = require('../../common/constant.cjs');
var logger = require('../../common/logger.cjs');
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var findpkg__default = /*#__PURE__*/_interopDefaultCompat(findpkg);
var prompts__default = /*#__PURE__*/_interopDefaultCompat(prompts);
var releaseIt__default = /*#__PURE__*/_interopDefaultCompat(releaseIt);
const __dirname$1 = path.dirname(node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli/commands/release/index.cjs', document.baseURI).href))));
let PLUGIN_PATH = path.join(__dirname$1, './elora-cli-release-plugin.mjs');
if (path.isAbsolute(PLUGIN_PATH)) {
PLUGIN_PATH = `file://${PLUGIN_PATH}`;
}
async function release(command) {
await index.isMonorepoProject();
if (command.registry) {
// 配置了registry
index.setPublishRegistry(command.registry);
}
let increment;
let preRelease = false;
const includes = ['beta', 'alpha', 'rc', 'next'];
const excludes = ['patch', 'minor', 'major'];
const p = findpkg__default.default(constant.CWD);
const pkg = p.next().value;
const v = pkg?.version;
const name = pkg?.name;
if (!pkg || !v || !name) {
throw new Error('获取package.json失败');
}
const splitIndex = !name.includes('/') ? 1 : name.indexOf('/') + 1;
const myName = name.startsWith('@') ? name.slice(splitIndex) : name;
if (!command.tag) {
const response = await prompts__default.default({
type: 'select',
name: 'tag',
message: '请选择要发布的版本',
choices: [
{
title: '小版本',
value: 'patch',
description: '用于小版本更新',
},
{
title: '中版本',
value: 'minor',
description: '用于中版本更新',
},
{
title: '大版本',
value: 'major',
description: '用于大版本更新',
},
{
title: '内测版本',
value: 'alpha',
description: '用于发布内部版本,bug多,不稳定,不断添加新功能',
},
{
title: '公测版本',
value: 'beta',
description: '用于发布公测版本的包,比alpha版本稳定,不断添加新功能',
},
{
title: '候选版本',
value: 'rc',
description: '用于发布候选版本的包,基本不添加新功能,修复完bug即可进入正式版',
},
{
title: '前瞻版本',
value: 'next',
description: '用于发布候选版本的包,基本不添加新功能,修复完bug即可进入正式版',
},
],
});
increment = response.tag;
if (includes.includes(response.tag)) {
increment = v.includes(response.tag) ? undefined : 'patch';
preRelease = response.tag;
command.tag = response.tag;
}
}
else {
if (!excludes.includes(command.tag)) {
increment = v.includes(command.tag) ? undefined : 'patch';
preRelease = command.tag;
}
}
if (command.tag) {
index.setPublishTag(command.tag);
}
// eslint-disable-next-line no-template-curly-in-string
const tagName = index.isMonorepo() ? `${myName}-v` + '${version}' : 'v${version}';
// eslint-disable-next-line no-template-curly-in-string
const commitMessage = index.isMonorepo() ? `release(${myName}): ` + '${version}' : 'release: ${version}';
try {
await releaseIt__default.default({
plugins: {
[PLUGIN_PATH]: {},
},
npm: {
publish: false,
versionArgs: ['--workspaces-update=false'],
},
increment,
preRelease,
git: {
tagName,
commitMessage,
},
});
}
catch (e) {
if (e.message.includes('Working dir must be clean')) {
logger.errorConsole('请先合并或者提交代码');
}
else {
console.log(e);
}
}
}
exports.release = release;