@iyowei/create-esm
Version:
这是一个命令行工具,给到 ESM 源码文件路径后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。
53 lines (48 loc) • 1.54 kB
JavaScript
import crypto from 'crypto';
import { existsSync } from 'fs';
import { homedir } from 'os';
import validateNpmPkgName from 'validate-npm-package-name';
import isEmpty from 'lodash/isEmpty.js';
import { ARG_NAME, ARG_DESCRIPTION, ARG_OUTPUT, ARG_SSH_KEY } from './args.js';
// 静态问题
export default {
[ARG_NAME]: {
type: 'text',
name: [ARG_NAME],
initial: crypto.randomBytes(16).toString('hex'),
message: '项目名',
// TODO: 检查包名唯一性
validate: (value) =>
validateNpmPkgName(`esm-${value}`).validForNewPackages
? true
: `英文,无特殊字符,可使用 "-"、"_"、"." 组合多个单词`,
},
[ARG_DESCRIPTION]: {
type: 'text',
name: [ARG_DESCRIPTION],
initial: '',
message: '是什么?干了什么?解决了什么问题?描述下',
},
[ARG_OUTPUT]: {
type: 'text',
name: [ARG_OUTPUT],
initial: homedir(), // 命令行、系统默认配置都未提供,默认提供用户根目录
message: '请提供新建项目的位置,不包括项目名',
validate: (value) => (existsSync(value) ? true : '磁盘位置不存在'),
},
[ARG_SSH_KEY]: {
type: 'text',
name: [ARG_SSH_KEY],
initial: '',
message: '必须提供私钥(绝对路径)建立安全 SSH 管道',
validate: (value) => {
if (!isEmpty(value)) {
if (existsSync(value)) {
return true;
}
return '给定路径未检测到私钥文件';
}
return '未提供私钥文件';
},
},
};