@iyowei/create-esm
Version:
这是一个命令行工具,给到 ESM 源码文件路径后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。
84 lines (69 loc) • 1.57 kB
JavaScript
import isEmpty from 'lodash/isEmpty.js';
import {
rules as argsRules,
ARG_BREAKPOINT,
ARG_NAME,
ARG_DESCRIPTION,
ARG_OUTPUT,
ARG_DEPENDENCIES,
ARG_SSH_KEY,
ARG_GITHUB_ORG,
ARG_BENCHMARK,
ARG_TDD,
} from './args.js';
import terminateCli from '../terminateCli.js';
const DEFAULTS = new Map(
Object.entries({
targets: [],
[ARG_NAME]: '',
pkgName: '',
[ARG_DESCRIPTION]: '',
pkgFiles: [],
pkgExports: {},
devDependencies: [
'eslint',
'eslint-config-prettier',
'eslint-plugin-import',
'eslint-config-airbnb-base',
'prettier',
],
[ARG_DEPENDENCIES]: [],
namespace: '',
generateReadme: false,
[ARG_TDD]: false,
[ARG_BENCHMARK]: false,
// 默认在个人 Github 账户下创建项目
githubOrgNameSameWithNpmOrg: false,
[ARG_GITHUB_ORG]: '',
[ARG_OUTPUT]: '',
newProjectPath: '',
[ARG_SSH_KEY]: '',
copiers: [],
prints: {},
gitignore: {},
[ARG_BREAKPOINT]: '',
}),
);
const KEY_STORE = Symbol('key store');
export default {
[KEY_STORE]: DEFAULTS,
set(key, value) {
const rule = argsRules[key];
if (!isEmpty(rule) && !isEmpty(rule.validate)) {
const validateResult = rule.validate(value);
if (!validateResult.ok) {
terminateCli(validateResult.message);
} else {
this[KEY_STORE].set(key, value);
}
} else {
this[KEY_STORE].set(key, value);
}
},
get(key) {
return this[KEY_STORE].get(key);
},
getAll() {
return this[KEY_STORE];
},
};