@@ -9,6 +9,7 @@ var uid = require('uid')
9
9
var ora = require ( 'ora' )
10
10
var chalk = require ( 'chalk' )
11
11
var inquirer = require ( 'inquirer' )
12
+ var request = require ( 'request' )
12
13
var logger = require ( '../lib/logger' )
13
14
var generate = require ( '../lib/generate' )
14
15
var checkVersion = require ( '../lib/check-version' )
@@ -96,25 +97,65 @@ function run () {
96
97
logger . success ( 'Generated "%s".' , name )
97
98
} )
98
99
} else {
99
- // use official templates
100
- if ( ! hasSlash ) {
101
- template = 'vuejs-templates/' + template
102
- }
103
100
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
+ }
118
108
} )
119
109
}
120
110
}
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