@@ -9,6 +9,7 @@ var uid = require('uid')
99var ora = require ( 'ora' )
1010var chalk = require ( 'chalk' )
1111var inquirer = require ( 'inquirer' )
12+ var request = require ( 'request' )
1213var logger = require ( '../lib/logger' )
1314var generate = require ( '../lib/generate' )
1415var checkVersion = require ( '../lib/check-version' )
@@ -96,25 +97,65 @@ function run () {
9697 logger . success ( 'Generated "%s".' , name )
9798 } )
9899 } else {
99- // use official templates
100- if ( ! hasSlash ) {
101- template = 'vuejs-templates/' + template
102- }
103100 checkVersion ( function ( ) {
104- // download and generate
105- var tmp = '/tmp/vue-template-' + uid ( )
106- var spinner = ora ( 'downloading template' )
107- spinner . start ( )
108- download ( template , tmp , { clone : clone } , function ( err ) {
109- spinner . stop ( )
110- if ( err ) logger . fatal ( err )
111- generate ( name , tmp , to , function ( err ) {
112- if ( err ) logger . fatal ( err )
113- rm ( tmp )
114- console . log ( )
115- logger . success ( 'Generated "%s".' , name )
116- } )
117- } )
101+ if ( ! hasSlash ) {
102+ // use official templates
103+ template = 'vuejs-templates/' + template
104+ checkDistBranch ( template , downloadAndGenerate )
105+ } else {
106+ downloadAndGenerate ( template )
107+ }
118108 } )
119109 }
120110}
111+
112+ /**
113+ * Check if the template has a dist branch, if yes, use that.
114+ *
115+ * @param {String } template
116+ * @param {Function } cb
117+ */
118+
119+ function checkDistBranch ( template , cb ) {
120+ request ( {
121+ url : 'https://api.github.com/repos/' + template + '/branches' ,
122+ headers : {
123+ 'User-Agent' : 'vue-cli'
124+ }
125+ } , function ( err , res , body ) {
126+ if ( err ) logger . fatal ( err )
127+ if ( res . statusCode !== 200 ) {
128+ return cb ( template )
129+ } else {
130+ var hasDist = JSON . parse ( body ) . some ( function ( branch ) {
131+ return branch . name === 'dist'
132+ } )
133+ if ( ! hasDist ) {
134+ console . log ( JSON . parse ( body ) )
135+ }
136+ return cb ( hasDist ? template + '#dist' : template )
137+ }
138+ } )
139+ }
140+
141+ /**
142+ * Download a generate from a template repo.
143+ *
144+ * @param {String } template
145+ */
146+
147+ function downloadAndGenerate ( template ) {
148+ var tmp = '/tmp/vue-template-' + uid ( )
149+ var spinner = ora ( 'downloading template' )
150+ spinner . start ( )
151+ download ( template , tmp , { clone : clone } , function ( err ) {
152+ spinner . stop ( )
153+ if ( err ) logger . fatal ( err )
154+ generate ( name , tmp , to , function ( err ) {
155+ if ( err ) logger . fatal ( err )
156+ rm ( tmp )
157+ console . log ( )
158+ logger . success ( 'Generated "%s".' , name )
159+ } )
160+ } )
161+ }
0 commit comments