Skip to content

Commit 85e4f98

Browse files
committed
support initializing in current directory
1 parent b19ae50 commit 85e4f98

File tree

2 files changed

+51
-34
lines changed

2 files changed

+51
-34
lines changed

bin/vue-init

+50-34
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@ var metadata = require('read-metadata')
55
var download = require('download-git-repo')
66
var program = require('commander')
77
var exists = require('fs').existsSync
8-
var join = require('path').join
9-
var resolve = require('path').resolve
8+
var path = require('path')
109
var rm = require('rimraf').sync
1110
var uid = require('uid')
1211
var chalk = require('chalk')
1312
var logger = require('../lib/logger')
1413
var getGitUser = require('../lib/git-user')
14+
var prompt = require('prompt-for-patched')
1515

1616
/**
1717
* Usage.
1818
*/
1919

2020
program
21-
.usage('<template-name> <project-name>')
21+
.usage('<template-name> [project-name]')
2222
.option('-c, --clone', 'use git clone')
2323

2424
/**
@@ -41,7 +41,7 @@ program.on('--help', function () {
4141
*/
4242

4343
program.parse(process.argv)
44-
if (program.args.length < 2) return program.help()
44+
if (program.args.length < 1) return program.help()
4545

4646
/**
4747
* Padding.
@@ -58,45 +58,61 @@ process.on('exit', function () {
5858

5959
var template = program.args[0]
6060
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
6264
var dir = program.directory
63-
var to = resolve(name)
65+
var to = path.resolve(rawName || '.')
6466
var clone = program.clone || false
65-
if (exists(to)) logger.fatal('"%s" already exists.', name)
6667

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+
}
7682
})
7783
} else {
78-
/**
79-
* Detect official template.
80-
*/
81-
82-
if (!hasSlash) {
83-
template = 'vuejs-templates/' + template
84-
}
84+
run()
85+
}
8586

86-
/**
87-
* Download and generate.
88-
*/
87+
/**
88+
* Check, download and generate the project.
89+
*/
8990

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) {
9495
if (err) logger.fatal(err)
95-
rm(tmp)
9696
console.log()
9797
logger.success('Generated "%s".', name)
9898
})
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+
}
100116
}
101117

102118
/**
@@ -108,7 +124,7 @@ if (hasSlash && exists(template)) {
108124
*/
109125

110126
function generate (src, dest, fn) {
111-
var template = join(src, 'template')
127+
var template = path.join(src, 'template')
112128
var khaos = new Khaos(template)
113129
var opts = options(src)
114130

@@ -124,7 +140,7 @@ function generate (src, dest, fn) {
124140
*/
125141

126142
function options (dir) {
127-
var file = join(dir, 'meta.json')
143+
var file = path.join(dir, 'meta.json')
128144
var opts = exists(file)
129145
? metadata.sync(file)
130146
: {}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"commander": "^2.9.0",
3131
"download-git-repo": "^0.1.1",
3232
"khaos-patched": "^0.9.3",
33+
"prompt-for-patched": "^1.1.3",
3334
"read-metadata": "^1.0.0",
3435
"request": "^2.67.0",
3536
"rimraf": "^2.5.0",

0 commit comments

Comments
 (0)