1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
6 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
7 | return new (P || (P = Promise))(function (resolve, reject) {
|
8 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
9 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
10 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
11 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
12 | });
|
13 | };
|
14 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
15 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
16 | };
|
17 | var __importStar = (this && this.__importStar) || function (mod) {
|
18 | if (mod && mod.__esModule) return mod;
|
19 | var result = {};
|
20 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
21 | result["default"] = mod;
|
22 | return result;
|
23 | };
|
24 | Object.defineProperty(exports, "__esModule", { value: true });
|
25 | const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
|
26 | const chalk_1 = __importDefault(require("chalk"));
|
27 | const fs = __importStar(require("fs-extra"));
|
28 | const path = __importStar(require("path"));
|
29 | const inquirer_1 = __importDefault(require("inquirer"));
|
30 | const templates_1 = __importDefault(require("../../consts/templates"));
|
31 | const cwd = process.cwd();
|
32 | function checkAppName(appName) {
|
33 | let appPath = path.join(cwd, appName);
|
34 | let { validForNewPackages, warnings } = validate_npm_package_name_1.default(path.parse(appName).base);
|
35 | if (!validForNewPackages) {
|
36 | console.log(chalk_1.default.red('Error: 项目名称不能包含大写字母'));
|
37 | process.exit(1);
|
38 | }
|
39 | return appPath;
|
40 | }
|
41 | const askTemplate = () => {
|
42 | return inquirer_1.default.prompt({
|
43 | type: 'list',
|
44 | name: 'appTplName',
|
45 | message: '请选择模板',
|
46 | choices: templates_1.default
|
47 | });
|
48 | };
|
49 | function copyTemplate(data) {
|
50 | let { appTplName, appPath } = data;
|
51 | let tplSrc = path.join(__dirname, '../..', 'templates', appTplName);
|
52 | let appName = path.basename(appPath);
|
53 | if (fs.existsSync(appPath)) {
|
54 | console.log(chalk_1.default.red(`目录 ${appName} 已存在\n`));
|
55 | process.exit(1);
|
56 | }
|
57 | fs.ensureDirSync(appPath);
|
58 | fs.copySync(tplSrc, appPath);
|
59 | }
|
60 | function outputLog({ appName, appPath }) {
|
61 | console.log(`\n项目 ${chalk_1.default.green(appName)} 创建成功, 路径: ${chalk_1.default.green(appPath)}\n`);
|
62 | console.log(chalk_1.default.green('nanachi watch'));
|
63 | console.log(` 实时构建项目,
|
64 | \t或使用nanachi watch:ali 构建支付宝小程序
|
65 | \t或使用nanachi watch:tt 构建头条小程序
|
66 | \t或使用nanachi watch:quick 构建快应用
|
67 | \t或使用nanachi watch:quick --huawei 构建华为快应用
|
68 | \t或使用nanachi watch:bu 构建百度智能小程序
|
69 | \t或使用nanachi watch:qq 构建QQ小程序
|
70 | \t或使用nanachi watch:h5 构建h5`);
|
71 | console.log();
|
72 | console.log(chalk_1.default.green('nanachi build'));
|
73 | console.log(` 构建项目(构建出错的情况下,修复后需要强制全量构建),
|
74 | \t或使用nanachi build:ali 构建支付宝小程序
|
75 | \t或使用nanachi build:tt 构建头条小程序
|
76 | \t或使用nanachi build:quick 构建快应用
|
77 | \t或使用nanachi build:quick --huawei 构建华为快应用
|
78 | \t或使用nanachi build:bu 构建百度智能小程序
|
79 | \t或使用nanachi build:qq 构建QQ小程序
|
80 | \t或使用nanachi build:h5 构建h5
|
81 | \t或使用nanachi build:360 构建360小程序`);
|
82 | console.log();
|
83 | console.log(chalk_1.default.magenta('请敲入下面两行命令,享受您的开发之旅' +
|
84 | chalk_1.default.magenta.bold('(npm i可改成yarn)')));
|
85 | console.log();
|
86 | console.log(` cd ${path.relative(cwd, appPath)} && npm i `);
|
87 | console.log(' nanachi watch');
|
88 | console.log();
|
89 | }
|
90 | function init(appName) {
|
91 | return __awaiter(this, void 0, void 0, function* () {
|
92 | const appPath = checkAppName(appName);
|
93 | const { appTplName } = yield askTemplate();
|
94 | copyTemplate({ appPath, appTplName });
|
95 | outputLog({ appName, appPath });
|
96 | });
|
97 | }
|
98 | exports.default = init;
|