@@ -5,20 +5,20 @@ var metadata = require('read-metadata')
5
5
var download = require ( 'download-git-repo' )
6
6
var program = require ( 'commander' )
7
7
var exists = require ( 'fs' ) . existsSync
8
- var join = require ( 'path' ) . join
9
- var resolve = require ( 'path' ) . resolve
8
+ var path = require ( 'path' )
10
9
var rm = require ( 'rimraf' ) . sync
11
10
var uid = require ( 'uid' )
12
11
var chalk = require ( 'chalk' )
13
12
var logger = require ( '../lib/logger' )
14
13
var getGitUser = require ( '../lib/git-user' )
14
+ var prompt = require ( 'prompt-for-patched' )
15
15
16
16
/**
17
17
* Usage.
18
18
*/
19
19
20
20
program
21
- . usage ( '<template-name> < project-name> ' )
21
+ . usage ( '<template-name> [ project-name] ' )
22
22
. option ( '-c, --clone' , 'use git clone' )
23
23
24
24
/**
@@ -41,7 +41,7 @@ program.on('--help', function () {
41
41
*/
42
42
43
43
program . parse ( process . argv )
44
- if ( program . args . length < 2 ) return program . help ( )
44
+ if ( program . args . length < 1 ) return program . help ( )
45
45
46
46
/**
47
47
* Padding.
@@ -58,45 +58,61 @@ process.on('exit', function () {
58
58
59
59
var template = program . args [ 0 ]
60
60
var hasSlash = template . indexOf ( '/' ) > - 1
61
- var name = program . args [ 1 ]
61
+ var rawName = program . args [ 1 ]
62
+ var inPlace = ! rawName || rawName === '.'
63
+ var name = inPlace ? path . relative ( '../' , process . cwd ( ) ) : rawName
62
64
var dir = program . directory
63
- var to = resolve ( name )
65
+ var to = path . resolve ( rawName || '.' )
64
66
var clone = program . clone || false
65
- if ( exists ( to ) ) logger . fatal ( '"%s" already exists.' , name )
66
67
67
- /**
68
- * Detect if template on file system.
69
- */
70
-
71
- if ( hasSlash && exists ( template ) ) {
72
- generate ( template , to , function ( err ) {
73
- if ( err ) logger . fatal ( err )
74
- console . log ( )
75
- logger . success ( 'Generated "%s".' , name )
68
+ if ( exists ( to ) ) {
69
+ prompt ( {
70
+ ok : {
71
+ type : 'boolean' ,
72
+ default : true ,
73
+ label : inPlace
74
+ ? 'Generate project in current directory?'
75
+ : 'Target directory exists. Continue?'
76
+ }
77
+ } , function ( err , answers ) {
78
+ if ( err ) throw err
79
+ if ( answers . ok ) {
80
+ run ( )
81
+ }
76
82
} )
77
83
} else {
78
- /**
79
- * Detect official template.
80
- */
81
-
82
- if ( ! hasSlash ) {
83
- template = 'vuejs-templates/' + template
84
- }
84
+ run ( )
85
+ }
85
86
86
- /**
87
- * Download and generate.
88
- */
87
+ /**
88
+ * Check, download and generate the project .
89
+ */
89
90
90
- var tmp = '/tmp/vue-template-' + uid ( )
91
- download ( template , tmp , { clone : clone } , function ( err ) {
92
- if ( err ) logger . fatal ( err )
93
- generate ( tmp , to , function ( err ) {
91
+ function run ( ) {
92
+ // check if template is local
93
+ if ( hasSlash && exists ( template ) ) {
94
+ generate ( template , to , function ( err ) {
94
95
if ( err ) logger . fatal ( err )
95
- rm ( tmp )
96
96
console . log ( )
97
97
logger . success ( 'Generated "%s".' , name )
98
98
} )
99
- } )
99
+ } else {
100
+ // use official templates
101
+ if ( ! hasSlash ) {
102
+ template = 'vuejs-templates/' + template
103
+ }
104
+ // download and generate
105
+ var tmp = '/tmp/vue-template-' + uid ( )
106
+ download ( template , tmp , { clone : clone } , function ( err ) {
107
+ if ( err ) logger . fatal ( err )
108
+ generate ( tmp , to , function ( err ) {
109
+ if ( err ) logger . fatal ( err )
110
+ rm ( tmp )
111
+ console . log ( )
112
+ logger . success ( 'Generated "%s".' , name )
113
+ } )
114
+ } )
115
+ }
100
116
}
101
117
102
118
/**
@@ -108,7 +124,7 @@ if (hasSlash && exists(template)) {
108
124
*/
109
125
110
126
function generate ( src , dest , fn ) {
111
- var template = join ( src , 'template' )
127
+ var template = path . join ( src , 'template' )
112
128
var khaos = new Khaos ( template )
113
129
var opts = options ( src )
114
130
@@ -124,7 +140,7 @@ function generate (src, dest, fn) {
124
140
*/
125
141
126
142
function options ( dir ) {
127
- var file = join ( dir , 'meta.json' )
143
+ var file = path . join ( dir , 'meta.json' )
128
144
var opts = exists ( file )
129
145
? metadata . sync ( file )
130
146
: { }
0 commit comments