@kmfb/create-node-ts-app
Version:
create-node-ts-app
106 lines • 8.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.installBuild = exports.installHusky = exports.installCZ = exports.installPrettier = exports.installESLint = void 0;
const chalk_1 = require("chalk");
const constants_1 = require("../constants");
const fs_1 = require("fs");
const shell = require("shelljs");
const util_1 = require("../util");
/**
* 安装 ESLint
*/
function installESLint() {
(0, util_1.printMsg)((0, chalk_1.blue)('installESLint...'));
shell.exec('npm i eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin -D');
try {
(0, fs_1.writeFileSync)('./.eslintrc.js', constants_1.eslintrc, { encoding: 'utf-8' });
}
catch (err) {
(0, util_1.printMsg)(`${(0, chalk_1.red)('Failed to write .eslintrc.js file content')}`);
(0, util_1.printMsg)(`${(0, chalk_1.red)('Please add the following content in .eslintrc.js')}`);
(0, util_1.printMsg)(`${(0, chalk_1.red)(constants_1.eslintrc)}`);
}
(0, util_1.modifyJsonFile)((packageJson) => {
packageJson.scripts['eslint:comment'] =
'使用 ESLint 检查并自动修复 src 目录下所有扩展名为 .ts 的文件';
packageJson.scripts['eslint'] =
'eslint --fix src --ext .ts --max-warnings=0';
});
}
exports.installESLint = installESLint;
/**
* 安装 Prettier
*/
function installPrettier() {
(0, util_1.printMsg)((0, chalk_1.blue)('installPrettier...'));
shell.exec('npm i prettier -D');
try {
(0, fs_1.writeFileSync)('./.prettierrc.js', constants_1.prettierrc, { encoding: 'utf-8' });
}
catch (err) {
(0, util_1.printMsg)(`${(0, chalk_1.red)('Failed to write .prettierrc.js file content')}`);
(0, util_1.printMsg)(`${(0, chalk_1.red)('Please add the following content in .prettierrc.js')}`);
(0, util_1.printMsg)(`${(0, chalk_1.red)(constants_1.prettierrc)}`);
}
(0, util_1.modifyJsonFile)((packageJson) => {
packageJson.scripts['prettier:comment'] =
'自动格式化 src 目录下的所有 .ts 文件';
packageJson.scripts['prettier'] = 'prettier --write "src/**/*.ts"';
});
}
exports.installPrettier = installPrettier;
/**
* 安装 CZ,规范 git 提交信息
*/
function installCZ() {
(0, util_1.printMsg)((0, chalk_1.blue)('installCZ...'));
shell.exec('npx commitizen init cz-conventional-changelog --save-dev --save-exact');
shell.exec('npm i @commitlint/cli @commitlint/config-conventional -D');
try {
(0, fs_1.writeFileSync)('./commitlint.config.js', constants_1.commitlint, { encoding: 'utf-8' });
}
catch (err) {
(0, util_1.printMsg)(`${(0, chalk_1.red)('Failed to write commitlint.config.js file content')}`);
(0, util_1.printMsg)(`${(0, chalk_1.red)('Please add the following content in commitlint.config.js')}`);
(0, util_1.printMsg)(`${(0, chalk_1.red)(constants_1.commitlint)}`);
}
(0, util_1.modifyJsonFile)((packageJson) => {
packageJson.scripts['commit:comment'] = '引导设置规范化的提交信息';
packageJson.scripts['commit'] = 'cz';
});
}
exports.installCZ = installCZ;
/**
* 安装 husky 和 lint-staged,以实现 git commit 时自动化校验
* @param hooks,需要自动执行的钩子
* @param lintStaged,需要钩子运行的命令
*/
function installHusky(hooks) {
(0, util_1.modifyJsonFile)((packageJson) => {
packageJson['husky'] = {
hooks: {
...hooks,
},
};
});
}
exports.installHusky = installHusky;
/**
* 安装构建工具,目前主要用于小项目,所以使用 typescript 原生的构建功能即可
*/
function installBuild(feature) {
(0, util_1.modifyJsonFile)((packageJson) => {
packageJson.scripts['build:comment'] = '构建';
let order = '';
if (feature.includes('ESLint')) {
order += 'npm run eslint';
}
if (feature.includes('Prettier')) {
order += ' && npm run prettier';
}
order += ' && rm -rf lib && tsc --build';
packageJson.scripts['build'] = order;
});
}
exports.installBuild = installBuild;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbEZlYXR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9pbnN0YWxsRmVhdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBa0M7QUFDbEMsNENBQWdFO0FBQ2hFLDJCQUFtQztBQUNuQyxpQ0FBaUM7QUFFakMsa0NBQW1EO0FBRW5EOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYTtJQUMzQixJQUFBLGVBQVEsRUFBQyxJQUFBLFlBQUksRUFBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFbkMsS0FBSyxDQUFDLElBQUksQ0FDUiw0RUFBNEUsQ0FDN0UsQ0FBQztJQUVGLElBQUk7UUFDRixJQUFBLGtCQUFhLEVBQUMsZ0JBQWdCLEVBQUUsb0JBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ2xFO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixJQUFBLGVBQVEsRUFBQyxHQUFHLElBQUEsV0FBRyxFQUFDLDJDQUEyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUEsZUFBUSxFQUFDLEdBQUcsSUFBQSxXQUFHLEVBQUMsa0RBQWtELENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBQSxlQUFRLEVBQUMsR0FBRyxJQUFBLFdBQUcsRUFBQyxvQkFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsSUFBQSxxQkFBYyxFQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDN0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUNuQyx5Q0FBeUMsQ0FBQztRQUM1QyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUMzQiw2Q0FBNkMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFyQkQsc0NBcUJDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixlQUFlO0lBQzdCLElBQUEsZUFBUSxFQUFDLElBQUEsWUFBSSxF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