@fesjs/create-fes-app
Version:
create a app base on fes.js
133 lines (132 loc) • 4.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _path = _interopRequireDefault(require("path"));
var _utils = require("@fesjs/utils");
var _validateNpmPackageName = _interopRequireDefault(require("validate-npm-package-name"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _inquirer = _interopRequireDefault(require("inquirer"));
var _utils2 = require("./utils");
var _App = _interopRequireDefault(require("./generator/App"));
var _Plugin = _interopRequireDefault(require("./generator/Plugin"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = async ({
cwd,
args
}) => {
if (args.proxy) {
process.env.HTTP_PROXY = args.proxy;
}
const projectName = args._[0];
const inCurrent = projectName === '.';
const name = inCurrent ? _path.default.relative('../', cwd) : projectName;
const targetDir = _path.default.resolve(cwd, projectName || '.');
const result = (0, _validateNpmPackageName.default)(name);
if (!result.validForNewPackages) {
console.error(_utils.chalk.red(`Invalid project name: "${name}"`));
result.errors && result.errors.forEach(err => {
console.error(_utils.chalk.red.dim(`Error: ${err}`));
});
result.warnings && result.warnings.forEach(warn => {
console.error(_utils.chalk.red.dim(`Warning: ${warn}`));
});
throw new Error('Process exited');
}
if (_fsExtra.default.pathExistsSync(targetDir) && !args.merge) {
if (args.force) {
await _fsExtra.default.remove(targetDir);
} else if (inCurrent) {
(0, _utils2.clearConsole)();
const {
ok
} = await _inquirer.default.prompt([{
name: 'ok',
type: 'confirm',
message: 'Generate project in current directory?'
}]);
if (!ok) {
return null;
}
} else {
(0, _utils2.clearConsole)();
const {
action
} = await _inquirer.default.prompt([{
name: 'action',
type: 'list',
message: `Target directory ${_utils.chalk.cyan(targetDir)} already exists. Pick an action:`,
choices: [{
name: 'Overwrite',
value: 'overwrite'
}, {
name: 'Merge',
value: 'merge'
}, {
name: 'Cancel',
value: false
}]
}]);
if (!action) {
return null;
}
if (action === 'overwrite') {
console.log(`\nRemoving ${_utils.chalk.cyan(targetDir)}...`);
await _fsExtra.default.remove(targetDir);
}
}
}
(0, _utils2.clearConsole)();
const {
template
} = await _inquirer.default.prompt([{
name: 'template',
type: 'list',
message: 'Pick an template:',
choices: [{
name: 'PC, suitable for management desk front-end applications',
value: 'pc'
}, {
name: 'H5, suitable for mobile applications',
value: 'h5'
}, {
name: 'Plugin, suitable for fes plugin',
value: 'plugin'
}, {
name: 'Cancel',
value: false
}]
}]);
if (template === 'pc' || template === 'h5') {
const generator = new _App.default({
cwd,
args,
targetDir,
path: _path.default.join(__dirname, `../templates/app/${template}`)
});
await generator.run();
console.log();
console.log(_utils.chalk.green(`project ${projectName} created successfully, please execute the following command to use:`));
console.log(`$ cd ${projectName}`);
console.log('$ pnpm i');
console.log('$ pnpm dev');
console.log();
} else if (template === 'plugin') {
const generator = new _Plugin.default({
cwd,
args,
targetDir,
path: _path.default.join(__dirname, '../templates/plugin'),
name
});
await generator.run();
console.log();
console.log(_utils.chalk.green(`plugin ${projectName} created successfully, please execute the following command to use:`));
console.log(`$ cd ${projectName}`);
console.log('$ pnpm i');
console.log('$ pnpm dev');
console.log();
}
};
exports.default = _default;