@@ -14,8 +14,10 @@ import {
14
14
executePostInitScript ,
15
15
} from './template' ;
16
16
import { changePlaceholderInTemplate } from './editTemplate' ;
17
- import * as PackageManager from '../../tools/PackageManager ' ;
17
+ import * as PackageManager from '../../tools/packageManager ' ;
18
18
import { processTemplateName } from './templateName' ;
19
+ import banner from './banner' ;
20
+ import { getLoader } from '../../tools/loader' ;
19
21
20
22
type Options = { |
21
23
template ? : string ,
@@ -39,50 +41,99 @@ async function createFromExternalTemplate(
39
41
templateName : string ,
40
42
npm ?: boolean ,
41
43
) {
42
- logger . info ( 'Initializing new project from external template' ) ;
44
+ logger . debug ( 'Initializing new project from external template' ) ;
45
+ logger . log ( banner ) ;
43
46
44
- let { uri , name } = await processTemplateName ( templateName ) ;
47
+ const Loader = getLoader ( ) ;
45
48
46
- installTemplatePackage ( uri , npm ) ;
47
- name = adjustNameIfUrl ( name ) ;
48
- const templateConfig = getTemplateConfig ( name ) ;
49
- copyTemplate ( name , templateConfig . templateDir ) ;
50
- changePlaceholderInTemplate ( projectName , templateConfig . placeholderName ) ;
49
+ const loader = new Loader ( { text : 'Downloading template' } ) ;
50
+ loader . start ( ) ;
51
51
52
- if ( templateConfig . postInitScript ) {
53
- executePostInitScript ( name , templateConfig . postInitScript ) ;
54
- }
52
+ try {
53
+ let { uri, name} = await processTemplateName ( templateName ) ;
54
+
55
+ await installTemplatePackage ( uri , npm ) ;
56
+ loader . succeed ( ) ;
57
+ loader . start ( 'Copying template' ) ;
58
+
59
+ name = adjustNameIfUrl ( name ) ;
60
+ const templateConfig = getTemplateConfig ( name ) ;
61
+ copyTemplate ( name , templateConfig . templateDir ) ;
62
+
63
+ loader . succeed ( ) ;
64
+ loader . start ( 'Preparing template' ) ;
55
65
56
- PackageManager . installAll ( { preferYarn : ! npm } ) ;
66
+ changePlaceholderInTemplate ( projectName , templateConfig . placeholderName ) ;
67
+
68
+ loader . succeed ( ) ;
69
+ const { postInitScript} = templateConfig ;
70
+ if ( postInitScript ) {
71
+ // Leaving trailing space because there may be stdout from the script
72
+ loader . start ( 'Executing post init script ' ) ;
73
+ await executePostInitScript ( name , postInitScript ) ;
74
+ loader . succeed ( ) ;
75
+ }
76
+
77
+ loader . start ( 'Installing all required dependencies' ) ;
78
+ await PackageManager . installAll ( { preferYarn : ! npm , silent : true } ) ;
79
+ loader . succeed ( ) ;
80
+ } catch ( e ) {
81
+ loader . fail ( ) ;
82
+ throw new Error ( e ) ;
83
+ }
57
84
}
58
85
59
86
async function createFromReactNativeTemplate (
60
87
projectName : string ,
61
88
version : string ,
62
89
npm ?: boolean ,
63
90
) {
64
- logger . info ( 'Initializing new project' ) ;
91
+ logger . debug ( 'Initializing new project' ) ;
92
+ logger . log ( banner ) ;
65
93
66
- if ( semver . valid ( version ) && ! semver . satisfies ( version , '0.60.0' ) ) {
67
- throw new Error (
68
- 'Cannot use React Native CLI to initialize project with version less than 0.60.0' ,
69
- ) ;
70
- }
94
+ const Loader = getLoader ( ) ;
95
+ const loader = new Loader ( { text : 'Downloading template' } ) ;
96
+ loader . start ( ) ;
71
97
72
- const TEMPLATE_NAME = 'react-native' ;
98
+ try {
99
+ if ( semver . valid ( version ) && ! semver . gte ( version , '0.60.0' ) ) {
100
+ throw new Error (
101
+ 'Cannot use React Native CLI to initialize project with version less than 0.60.0' ,
102
+ ) ;
103
+ }
73
104
74
- const { uri } = await processTemplateName ( ` ${ TEMPLATE_NAME } @ ${ version } ` ) ;
105
+ const TEMPLATE_NAME = 'react-native' ;
75
106
76
- installTemplatePackage ( uri , npm ) ;
77
- const templateConfig = getTemplateConfig ( TEMPLATE_NAME ) ;
78
- copyTemplate ( TEMPLATE_NAME , templateConfig . templateDir ) ;
79
- changePlaceholderInTemplate ( projectName , templateConfig . placeholderName ) ;
107
+ const { uri} = await processTemplateName ( `${ TEMPLATE_NAME } @${ version } ` ) ;
80
108
81
- if ( templateConfig . postInitScript ) {
82
- executePostInitScript ( TEMPLATE_NAME , templateConfig . postInitScript ) ;
83
- }
109
+ await installTemplatePackage ( uri , npm ) ;
110
+
111
+ loader . succeed ( ) ;
112
+ loader . start ( 'Copying template' ) ;
113
+
114
+ const templateConfig = getTemplateConfig ( TEMPLATE_NAME ) ;
115
+ copyTemplate ( TEMPLATE_NAME , templateConfig . templateDir ) ;
84
116
85
- PackageManager . installAll ( { preferYarn : ! npm } ) ;
117
+ loader . succeed ( ) ;
118
+ loader . start ( 'Processing template' ) ;
119
+
120
+ changePlaceholderInTemplate ( projectName , templateConfig . placeholderName ) ;
121
+
122
+ loader . succeed ( ) ;
123
+ const { postInitScript} = templateConfig ;
124
+ if ( postInitScript ) {
125
+ loader . start ( 'Executing post init script' ) ;
126
+ await executePostInitScript ( TEMPLATE_NAME , postInitScript ) ;
127
+ loader . succeed ( ) ;
128
+ }
129
+
130
+ loader . start ( 'Installing all required dependencies' ) ;
131
+ await PackageManager . installAll ( { preferYarn : ! npm , silent : true } ) ;
132
+ loader . succeed ( ) ;
133
+ } catch ( e ) {
134
+ loader . fail ( ) ;
135
+ throw new Error ( e ) ;
136
+ }
86
137
}
87
138
88
139
function createProject ( projectName : string , options : Options , version : string ) {
0 commit comments