@@ -212,8 +212,9 @@ function run(root, appName, version, verbose, originalDirectory, template) {
212
212
checkNodeVersion ( packageName ) ;
213
213
214
214
// Since react-scripts has been installed with --save
215
- // We need to move it into devDependencies and rewrite package.json
216
- moveReactScriptsToDev ( packageName ) ;
215
+ // we need to move it into devDependencies and rewrite package.json
216
+ // also ensure react dependencies have caret version range
217
+ fixDependencies ( packageName ) ;
217
218
218
219
var scriptsPath = path . resolve (
219
220
process . cwd ( ) ,
@@ -325,7 +326,24 @@ function checkAppName(appName) {
325
326
}
326
327
}
327
328
328
- function moveReactScriptsToDev ( packageName ) {
329
+ function patchReactDependencyVersion ( name , version ) {
330
+ if ( typeof version === 'undefined' ) {
331
+ console . error (
332
+ chalk . red ( 'Missing ' + name + ' dependency in package.json' )
333
+ ) ;
334
+ process . exit ( 1 ) ;
335
+ }
336
+ var patchedVersion = '^' + version ;
337
+ if ( ! semver . validRange ( patchedVersion ) ) {
338
+ console . error (
339
+ 'Unable to patch ' + name + ' dependency version because version ' + chalk . red ( version ) + ' will become invalid ' + chalk . red ( patchedVersion )
340
+ ) ;
341
+ patchedVersion = version ;
342
+ }
343
+ return patchedVersion ;
344
+ }
345
+
346
+ function fixDependencies ( packageName ) {
329
347
var packagePath = path . join ( process . cwd ( ) , 'package.json' ) ;
330
348
var packageJson = require ( packagePath ) ;
331
349
@@ -349,6 +367,9 @@ function moveReactScriptsToDev(packageName) {
349
367
packageJson . devDependencies [ packageName ] = packageVersion ;
350
368
delete packageJson . dependencies [ packageName ] ;
351
369
370
+ packageJson . dependencies [ 'react' ] = patchReactDependencyVersion ( 'react' , packageJson . dependencies [ 'react' ] ) ;
371
+ packageJson . dependencies [ 'react-dom' ] = patchReactDependencyVersion ( 'react-dom' , packageJson . dependencies [ 'react-dom' ] ) ;
372
+
352
373
fs . writeFileSync ( packagePath , JSON . stringify ( packageJson , null , 2 ) ) ;
353
374
}
354
375
0 commit comments