11const { promisify} = require ( 'util' ) ;
22const path = require ( 'path' ) ;
3+ const fs = require ( 'fs' ) ;
34
45const program = require ( 'commander' ) ;
56const downloadRepo = promisify ( require ( 'download-git-repo' ) ) ;
67const open = require ( 'open' ) ;
78
89const log = require ( '../utils/log' ) ;
910const terminal = require ( '../utils/terminal' ) ;
10- const { ejsCompile, writeFile} = require ( '../utils/file' ) ;
11+ const { ejsCompile, writeFile, mkdirSync } = require ( '../utils/file' ) ;
1112const repoConfig = require ( '../config/repo_config' ) ;
1213
1314const createProject = async ( project , otherArg ) => {
@@ -19,7 +20,7 @@ const createProject = async (project, otherArg) => {
1920
2021// 3.执行终端命令npm install
2122// terminal.exec('npm install', {cwd: `./${project}`});
22- const npm = project . platform === 'win32' ?'npm.cmd' :'npm' ;
23+ const npm = process . platform === 'win32' ?'npm.cmd' :'npm' ;
2324await terminal . spawn ( npm , [ 'install' ] , { cwd :`./${ project } ` } ) ;
2425
2526// 4.打开浏览器
@@ -29,19 +30,35 @@ const createProject = async (project, otherArg) => {
2930await terminal . spawn ( npm , [ 'run' , 'serve' ] , { cwd :`./${ project } ` } ) ;
3031}
3132
32- const addComponent = async ( name ) => {
33- console . log ( name , program . dest ) ;
34-
33+ const handleEjsToFile = async ( name , dest , template , filename ) => {
3534// 1.获取模块引擎的路径
36- const templatePath = path . resolve ( __dirname , '../ template/component.vue.ejs' ) ;
37- const result = await ejsCompile ( templatePath , { name} ) ;
35+ const templatePath = path . resolve ( __dirname , template ) ;
36+ const result = await ejsCompile ( templatePath , { name, lowerName : name . toLowerCase ( ) } ) ;
3837
3938// 2.写入文件中
40- const targetPath = path . resolve ( program . dest , `${ name } .vue` ) ;
39+ // 判断文件不存在,那么就创建文件
40+ mkdirSync ( dest ) ;
41+ const targetPath = path . resolve ( dest , filename ) ;
4142writeFile ( targetPath , result ) ;
4243}
4344
45+ const addComponent = async ( name , dest ) => {
46+ handleEjsToFile ( name , dest , '../template/component.vue.ejs' , `${ name } .vue` ) ;
47+ }
48+
49+ const addPage = async ( name , dest ) => {
50+ addComponent ( name , dest ) ;
51+ handleEjsToFile ( name , dest , '../template/vue-router.js.ejs' , 'router.js' )
52+ }
53+
54+ const addStore = async ( name , dest ) => {
55+ handleEjsToFile ( name , dest , '../template/vue-store.js.ejs' , 'index.js' )
56+ handleEjsToFile ( name , dest , '../template/vue-types.js.ejs' , 'types.js' )
57+ }
58+
4459module . exports = {
4560 createProject,
46- addComponent
61+ addComponent,
62+ addPage,
63+ addStore
4764}