@iyowei/create-esm
Version:
这是一个命令行工具,给到 ESM 源码文件路径后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。
140 lines (114 loc) • 4 kB
JavaScript
import { basename } from 'path';
import chalk from 'chalk'; // eslint-disable-line
import gradient from 'gradient-string';
import figlet from 'figlet';
import isEmpty from 'lodash/isEmpty.js';
export const TXT_NAME = 'name';
export const texts = {
[TXT_NAME]: 'create-esm',
};
export function getText(key) {
return texts[key];
}
export const mainHelp = `
${chalk.bold('使用方式')}
$ ${texts[TXT_NAME]} | ce | esm [指定待拷贝的文件、文件夹] [选项]
${chalk.bold('选项')}
--name, -n 包名(实际安装时使用的名称)
--description 描述
--output, -o 新建项目的磁盘位置
--dependencies, -d 手动指定要安装的依赖
--no-double-check-dependencies 不需要二次确认是否还有其它依赖需要安装
--sshkey, -k 私钥文件地址
--personal 包名有命名空间时,指定在 Github 个人账户下创建项目
--github-org 包名有命名空间但与 Github 组织名不同时需特别指定,默认在与命名空间同名的 Github 组织下创建项目
--breakpoint, -b 'repo'、'npm'、'copy'、'push'、'changelog'、’publish‘ 任一,指定任务及其之前的任务都会被执行
--benchmark 架设性能s测试环境
--tdd 架设单元测试环境
--version, -v 查看版本号
--help, -h 查看帮助
${chalk.bold('命令')}
set 设置 ${texts[TXT_NAME]} 全局配置
reset 清空 ${texts[TXT_NAME]} 全局配置
defaults 查看 ${texts[TXT_NAME]} 全局配置
${chalk.bold('示例')}
$ esm
$ esm /Users/iyowei/Development/generators/create-esm/src/notEmptyString.js
`;
export const setupHelp = `
使用方式
$ ${texts[TXT_NAME]} set [键] [值]
示例
$ ${texts[TXT_NAME]} set output /Users/iyowei/Development/shortime
`;
export const defaultsHelp = `
查看 @iyowei/create-esm 全局配置
示例
$ ${texts[TXT_NAME]} defaults
`;
export const resetHelp = `
重置 @iyowei/create-esm 全局配置
示例
$ ${texts[TXT_NAME]} reset
`;
export const HINT_NO_FILE_INPUT = 'nfi';
export const hints = {
[HINT_NO_FILE_INPUT]: chalk.redBright(
`无法确定 NPM 包导出文件,请重新输入,应${chalk.underline(
'全是文件,或文件、文件夹的组合',
)}。`,
),
};
export const COMMAND_SET = 'set';
export const COMMAND_DEFAULTS = 'defaults';
export const COMMAND_RESET = 'reset';
export const banner = `\n${chalk.bold(
gradient.rainbow(
figlet.textSync('Scaffold!', {
font: 'Ghost',
horizontalLayout: 'default',
verticalLayout: 'default',
width: 100,
whitespaceBreak: true,
}),
),
)}\n`;
export const getReport = (opts) => {
let f = `
即将在 ${chalk.greenBright.bold(
opts.get('output'),
)} 位置创建 ${chalk.greenBright.bold(opts.get('name'))} 项目。
待拷贝,
${opts
.get('targets')
.reduce(
(acc, cur) =>
!acc
? `- ${chalk.greenBright.bold(basename(cur.path))}, ${chalk.grey(
cur.path,
)}`
: `${acc}\n- ${chalk.greenBright.bold(
basename(cur.path),
)}, ${chalk.grey(cur.path)}`,
'',
)}\n
`;
// 如果 `opts.dependencies` 有效,才显示 "需要安装的依赖有这些" 部分
if (!isEmpty(opts.get('dependencies'))) {
f += `需要安装的依赖有这些,
${opts
.get('dependencies')
.reduce(
(acc, cur) =>
!acc
? `- ${chalk.greenBright.bold(cur)}`
: `${acc}\n- ${chalk.greenBright.bold(cur)}`,
'',
)}\n
`;
}
f += chalk.yellowBright.bold(
'按 [ctrl + c] 终止,或按其它 [任意] 键继续... \n',
);
return f;
};