@@ -212,8 +212,9 @@ function run(root, appName, version, verbose, originalDirectory, template) {
212212 checkNodeVersion ( packageName ) ;
213213
214214 // 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 ) ;
217218
218219 var scriptsPath = path . resolve (
219220 process . cwd ( ) ,
@@ -325,7 +326,29 @@ function checkAppName(appName) {
325326 }
326327}
327328
328- function moveReactScriptsToDev ( packageName ) {
329+ function makeCaretRange ( dependencies , name ) {
330+ var version = dependencies [ name ] ;
331+
332+ if ( typeof version === 'undefined' ) {
333+ console . error (
334+ chalk . red ( 'Missing ' + name + ' dependency in package.json' )
335+ ) ;
336+ process . exit ( 1 ) ;
337+ }
338+
339+ var patchedVersion = '^' + version ;
340+
341+ if ( ! semver . validRange ( patchedVersion ) ) {
342+ console . error (
343+ 'Unable to patch ' + name + ' dependency version because version ' + chalk . red ( version ) + ' will become invalid ' + chalk . red ( patchedVersion )
344+ ) ;
345+ patchedVersion = version ;
346+ }
347+
348+ dependencies [ name ] = patchedVersion ;
349+ }
350+
351+ function fixDependencies ( packageName ) {
329352 var packagePath = path . join ( process . cwd ( ) , 'package.json' ) ;
330353 var packageJson = require ( packagePath ) ;
331354
@@ -349,6 +372,9 @@ function moveReactScriptsToDev(packageName) {
349372 packageJson . devDependencies [ packageName ] = packageVersion ;
350373 delete packageJson . dependencies [ packageName ] ;
351374
375+ makeCaretRange ( packageJson . dependencies , 'react' ) ;
376+ makeCaretRange ( packageJson . dependencies , 'react-dom' ) ;
377+
352378 fs . writeFileSync ( packagePath , JSON . stringify ( packageJson , null , 2 ) ) ;
353379}
354380
0 commit comments