UNPKG

3.21 kBJavaScriptView Raw
1/*!
2输出命令行提示与选择模板
3*/
4/* eslint-disable */
5const validateProjectName = require('validate-npm-package-name');
6const chalk = require('chalk');
7const fs = require('fs-extra');
8const path = require('path');
9const cwd = process.cwd();
10const inquirer = require('inquirer');
11const templates = require('../consts/templates');
12
13function 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
23const askTemplate = () => {
24 return inquirer.prompt({
25 type: 'list',
26 name: 'appTplName',
27 message: '请选择模板',
28 choices: templates
29 });
30};
31
32function 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
45function 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
84async function init(appName){
85 const appPath = checkAppName(appName);
86 const { appTplName } = await askTemplate();
87 copyTemplate({ appPath, appTplName});
88 outputLog({ appName, appPath });
89}
90
91module.exports = init;