@@ -48,7 +48,7 @@ async function init() {
48
48
// --typescript / --ts
49
49
// --jsx
50
50
// --router / --vue-router
51
- // --vuex (todo)
51
+ // --vuex
52
52
// --with-tests / --tests / --cypress
53
53
const argv = minimist ( process . argv . slice ( 2 ) , {
54
54
alias : {
@@ -60,6 +60,10 @@ async function init() {
60
60
boolean : true
61
61
} )
62
62
63
+ // if any of the feature flags is set, we would skip the feature prompts
64
+ // use `??` instead of `||` once we drop Node.js 12 support
65
+ const isFeatureFlagsUsed = typeof ( argv . ts || argv . jsx || argv . router || argv . vuex || argv . tests ) === 'boolean'
66
+
63
67
let targetDir = argv . _ [ 0 ]
64
68
const defaultProjectName = ! targetDir ? 'vue-project' : targetDir
65
69
@@ -116,32 +120,41 @@ async function init() {
116
120
} ,
117
121
{
118
122
name : 'needsTypeScript' ,
119
- type : ( ) => ( argv . typescript ? null : 'toggle' ) ,
123
+ type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
120
124
message : 'Add TypeScript?' ,
121
125
initial : false ,
122
126
active : 'Yes' ,
123
127
inactive : 'No'
124
128
} ,
125
129
{
126
- name : 'needsJSX ' ,
127
- type : ( ) => ( argv . jsx ? null : 'toggle' ) ,
130
+ name : 'needsJsx ' ,
131
+ type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
128
132
message : 'Add JSX Support?' ,
129
133
initial : false ,
130
134
active : 'Yes' ,
131
135
inactive : 'No'
132
136
} ,
133
137
{
134
138
name : 'needsRouter' ,
135
- type : ( ) => ( argv . router ? null : 'toggle' ) ,
139
+ type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
136
140
message :
137
141
'Add Vue Router for Single Page Application development?' ,
138
142
initial : false ,
139
143
active : 'Yes' ,
140
144
inactive : 'No'
141
145
} ,
146
+ {
147
+ name : 'needsVuex' ,
148
+ type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
149
+ message :
150
+ 'Add Vuex for state management?' ,
151
+ initial : false ,
152
+ active : 'Yes' ,
153
+ inactive : 'No'
154
+ } ,
142
155
{
143
156
name : 'needsTests' ,
144
- type : ( ) => ( argv . tests ? null : 'toggle' ) ,
157
+ type : ( ) => ( isFeatureFlagsUsed ? null : 'toggle' ) ,
145
158
message : 'Add Cypress for testing?' ,
146
159
initial : false ,
147
160
active : 'Yes' ,
@@ -164,9 +177,10 @@ async function init() {
164
177
const {
165
178
packageName = toValidPackageName ( defaultProjectName ) ,
166
179
shouldOverwrite,
167
- needsJSX = argv . jsx ,
180
+ needsJsx = argv . jsx ,
168
181
needsTypeScript = argv . typescript ,
169
182
needsRouter = argv . router ,
183
+ needsVuex = argv . vuex ,
170
184
needsTests = argv . tests
171
185
} = result
172
186
const root = path . join ( cwd , targetDir )
@@ -193,15 +207,46 @@ async function init() {
193
207
194
208
// Add configs.
195
209
render ( 'config/base' )
196
- if ( needsJSX ) {
210
+ if ( needsJsx ) {
197
211
render ( 'config/jsx' )
198
212
}
213
+ if ( needsRouter ) {
214
+ render ( 'config/router' )
215
+ }
216
+ if ( needsVuex ) {
217
+ render ( 'config/vuex' )
218
+ }
199
219
if ( needsTests ) {
200
220
render ( 'config/cypress' )
201
221
}
202
222
if ( needsTypeScript ) {
203
223
render ( 'config/typescript' )
224
+ }
225
+
226
+ // Render code template.
227
+ // prettier-ignore
228
+ const codeTemplate =
229
+ ( needsTypeScript ? 'typescript-' : '' ) +
230
+ ( needsRouter ? 'router' : 'default' )
231
+ render ( `code/${ codeTemplate } ` )
232
+
233
+ // Render entry file (main.js/ts).
234
+ if ( needsVuex && needsRouter ) {
235
+ render ( 'entry/vuex-and-router' )
236
+ } else if ( needsVuex ) {
237
+ render ( 'entry/vuex' )
238
+ } else if ( needsRouter ) {
239
+ render ( 'entry/router' )
240
+ } else {
241
+ render ( 'entry/default' )
242
+ }
204
243
244
+ // TODO:
245
+ // Replace `<!-- NPM-SCRIPTS-PLACEHOLDER -->` in README with detailed explanation of npm scripts.
246
+
247
+ // Cleanup.
248
+
249
+ if ( needsTypeScript ) {
205
250
// rename all `.js` files to `.ts`
206
251
// rename jsconfig.json to tsconfig.json
207
252
preOrderDirectoryTraverse (
@@ -220,18 +265,6 @@ async function init() {
220
265
)
221
266
}
222
267
223
- // Render code template.
224
- // prettier-ignore
225
- const codeTemplate =
226
- ( needsTypeScript ? 'typescript-' : '' ) +
227
- ( needsRouter ? 'router' : 'default' )
228
- render ( `code/${ codeTemplate } ` )
229
-
230
- // TODO:
231
- // Replace `<!-- NPM-SCRIPTS-PLACEHOLDER -->` in README with detailed explanation of npm scripts.
232
-
233
- // Cleanup.
234
-
235
268
if ( ! needsTests ) {
236
269
// All templates assumes the need of tests.
237
270
// If the user doesn't need it:
0 commit comments