1 |
|
2 |
|
3 |
|
4 |
|
5 | const validateProjectName = require('validate-npm-package-name');
|
6 | const chalk = require('chalk');
|
7 | const fs = require('fs-extra');
|
8 | const path = require('path');
|
9 | const cwd = process.cwd();
|
10 | const inquirer = require('inquirer');
|
11 | const templates = require('../consts/templates');
|
12 |
|
13 | function checkAppName(appName){
|
14 | let appPath = path.join(cwd, appName);
|
15 | let {validForNewPackages, warnings} = validateProjectName( path.parse(appName).base );
|
16 | if (!validForNewPackages) {
|
17 | console.log(chalk.red('Error: 项目名称不能包含大写字母'));
|
18 | process.exit(1);
|
19 | }
|
20 | return appPath;
|
21 | }
|
22 |
|
23 | const askTemplate = () => {
|
24 | return inquirer.prompt({
|
25 | type: 'list',
|
26 | name: 'appTplName',
|
27 | message: '请选择模板',
|
28 | choices: templates
|
29 | });
|
30 | };
|
31 |
|
32 | function copyTemplate(data){
|
33 | let { appTplName, appPath} = data;
|
34 | let tplSrc = path.join( __dirname, '..', 'templates', appTplName);
|
35 | let appName = path.basename(appPath);
|
36 | if (fs.existsSync(appPath)) {
|
37 | console.log(chalk.red(`目录 ${appName} 已存在\n`));
|
38 | process.exit(1);
|
39 | }
|
40 |
|
41 | fs.ensureDirSync(appPath);
|
42 | fs.copySync(tplSrc, appPath);
|
43 | }
|
44 |
|
45 | function outputLog({ appName, appPath }) {
|
46 | console.log(
|
47 | `\n项目 ${chalk.green(appName)} 创建成功, 路径: ${chalk.green(
|
48 | appPath
|
49 | )}\n`
|
50 | );
|
51 |
|
52 | console.log(chalk.green('nanachi watch'));
|
53 | console.log(` 实时构建项目,
|
54 | \t或使用nanachi watch:ali 构建支付宝小程序
|
55 | \t或使用nanachi watch:tt 构建头条小程序
|
56 | \t或使用nanachi watch:quick 构建快应用
|
57 | \t或使用nanachi watch:quick --huawei 构建快应用
|
58 | \t或使用nanachi watch:bu 构建百度智能小程序
|
59 | \t或使用nanachi watch:qq 构建QQ小程序
|
60 | \t或使用nanachi watch:h5 构建h5`);
|
61 | console.log();
|
62 | console.log(chalk.green('nanachi build'));
|
63 | console.log(` 构建项目(构建出错的情况下,修复后需要强制全量构建),
|
64 | \t或使用nanachi build:ali 构建支付宝小程序
|
65 | \t或使用nanachi build:tt 构建头条小程序
|
66 | \t或使用nanachi build:quick 构建快应用
|
67 | \t或使用nanachi build:quick --huawei 构建快应用
|
68 | \t或使用nanachi build:bu 构建百度智能小程序
|
69 | \t或使用nanachi build:qq 构建QQ小程序
|
70 | \t或使用nanachi build:h5 构建h5`);
|
71 | console.log();
|
72 | console.log(
|
73 | chalk.magenta(
|
74 | '请敲入下面两行命令,享受您的开发之旅' +
|
75 | chalk.magenta.bold('(npm i可改成yarn)')
|
76 | )
|
77 | );
|
78 | console.log();
|
79 | console.log(` cd ${ path.relative(cwd, appPath) } && npm i `);
|
80 | console.log(' nanachi watch');
|
81 | console.log();
|
82 | }
|
83 |
|
84 | async function init(appName){
|
85 | const appPath = checkAppName(appName);
|
86 | const { appTplName } = await askTemplate();
|
87 | copyTemplate({ appPath, appTplName});
|
88 | outputLog({ appName, appPath });
|
89 | }
|
90 |
|
91 | module.exports = init;
|