diff --git a/bin/vue-init b/bin/vue-init index d9b85c17cc..3c418e43e8 100755 --- a/bin/vue-init +++ b/bin/vue-init @@ -14,6 +14,8 @@ var generate = require('../lib/generate') var checkVersion = require('../lib/check-version') var warnings = require('../lib/warnings') var { isLocalPath, getTemplatePath } = require('../lib/local-path') +var rm = require('rimraf').sync +var ncp = require('ncp').ncp /** * Usage. @@ -62,7 +64,7 @@ var to = path.resolve(rawName || '.') var clone = program.clone || false var tmp = path.join(home, '.vue-templates', template.replace(/\//g, '-')) -if (program.offline) { +if (program.offline && exists(tmp)) { console.log(`> Use cached template at ${chalk.yellow(tildify(tmp))}`) template = tmp } @@ -139,15 +141,25 @@ function run () { */ function downloadAndGenerate (template) { + var tmpCache = tmp + '_cache' + if (exists(tmpCache)) { + rm(tmpCache) + } var spinner = ora('downloading template') spinner.start() - download(template, tmp, { clone: clone }, function (err) { + download(template, tmpCache, { clone: clone }, function (err) { spinner.stop() if (err) logger.fatal('Failed to download repo ' + template + ': ' + err.message.trim()) - generate(name, tmp, to, function (err) { + generate(name, tmpCache, to, function (err) { if (err) logger.fatal(err) console.log() logger.success('Generated "%s".', name) + ncp(tmpCache, tmp, function (err) { + rm(tmpCache) + if (err) { + rm(tmp) + } + }) }) }) } diff --git a/package.json b/package.json index d8d89e46b8..d8cfe86a53 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "metalsmith": "^2.1.0", "minimatch": "^3.0.0", "multimatch": "^2.1.0", + "ncp": "^2.0.0", "opn": "^4.0.2", "ora": "^0.2.1", "post-compile-webpack-plugin": "^0.1.0",