@@ -12,8 +12,20 @@ const packageJson = require('./package.json');
12
12
13
13
let projectName ;
14
14
15
+ const PRESETS = {
16
+ default : [ 'typescript_universal' , 'webpack' , 'karma_jasmine' ] ,
17
+ server : [ 'typescript_server' ]
18
+ } ;
19
+
15
20
const program = new commander . Command ( packageJson . name )
16
21
. version ( packageJson . version )
22
+ . option (
23
+ '-p, --preset [name]' ,
24
+ `[ default | server ]
25
+ * default: Typescript, Webpack, Karma, Jasmine
26
+ * server: Typescript, ts-node, nodemon` ,
27
+ 'default'
28
+ )
17
29
. arguments ( '<project-directory>' )
18
30
. usage ( `${ chalk . green ( '<project-directory>' ) } ` )
19
31
. action ( name => {
@@ -36,9 +48,9 @@ if (typeof projectName === 'undefined') {
36
48
process . exit ( 1 ) ;
37
49
}
38
50
39
- createApp ( projectName ) ;
51
+ createApp ( projectName , program . preset ) ;
40
52
41
- function createApp ( name ) {
53
+ function createApp ( name , preset ) {
42
54
const root = path . resolve ( name ) ;
43
55
const appName = path . basename ( root ) ;
44
56
@@ -51,7 +63,6 @@ function createApp(name) {
51
63
console . log ( `Creating a new TypeScript library in ${ chalk . green ( root ) } .` ) ;
52
64
console . log ( ) ;
53
65
54
- const originalDirectory = process . cwd ( ) ;
55
66
process . chdir ( root ) ;
56
67
57
68
if ( ! semver . satisfies ( process . version , '>=6.0.0' ) ) {
@@ -74,23 +85,23 @@ function createApp(name) {
74
85
) ;
75
86
}
76
87
}
77
- run ( root , appName , originalDirectory ) ;
88
+ run ( root , appName , preset ) ;
78
89
}
79
90
80
- async function run ( root , appName , originalDirectory ) {
91
+ async function run ( root , appName , preset ) {
81
92
function installTemplate ( templateName ) {
82
93
try {
83
94
console . log ( `loading ${ templateName } template in ${ path . resolve ( __dirname ) } ` ) ;
84
95
const res = require ( 'child_process' )
85
- . execSync ( `npm install ${ templateName } ` , { cwd : path . resolve ( __dirname ) } )
96
+ . execSync ( `npm install -D ${ templateName } ` , { cwd : path . resolve ( __dirname ) } )
86
97
. toString ( )
87
98
. trim ( ) ;
88
99
console . log ( `${ templateName } loaded successfully` ) ;
89
100
} catch ( e ) {
90
101
console . log ( `${ templateName } err` ) ;
91
102
}
92
103
}
93
- const templateName = '@nobrainr/typescript_universal-webpack-karma_jasmine' ;
104
+ const templateName = getTemplateNameFromPreset ( PRESETS [ preset ] ) ;
94
105
const templatePath = path . resolve ( __dirname , 'node_modules' , templateName ) ;
95
106
if ( ! fs . existsSync ( templatePath ) ) {
96
107
try {
@@ -113,6 +124,10 @@ async function run(root, appName, originalDirectory) {
113
124
fs . writeFileSync ( packageJsonPath , JSON . stringify ( packageJson , null , 2 ) ) ;
114
125
console . log ( 'Installing packages. This might take a couple of minutes.' ) ;
115
126
return await install ( ) ;
127
+
128
+ function getTemplateNameFromPreset ( preset ) {
129
+ return `@nobrainr/${ preset . join ( '-' ) } ` ;
130
+ }
116
131
}
117
132
118
133
function install ( ) {
0 commit comments