From 403631a1461bd40adde179760d485dcefb3c70e9 Mon Sep 17 00:00:00 2001 From: William Horton Date: Mon, 22 Aug 2016 22:31:44 -0400 Subject: [PATCH 1/5] Get latest version numbers of react and react-dom from npm before install. --- scripts/init.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/init.js b/scripts/init.js index 074fe428aef..60e2bf25228 100644 --- a/scripts/init.js +++ b/scripts/init.js @@ -10,6 +10,7 @@ var fs = require('fs-extra'); var path = require('path'); var spawn = require('cross-spawn'); +var spawnSync = require('cross-spawn').sync; var pathExists = require('path-exists'); var chalk = require('chalk'); @@ -23,7 +24,17 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { appPackage.dependencies = appPackage.dependencies || {}; appPackage.devDependencies = appPackage.devDependencies || {}; ['react', 'react-dom'].forEach(function (key) { - appPackage.dependencies[key] = ownPackage.devDependencies[key]; + var args = [ + 'view', + key, + 'version', + verbose && '--verbose' + ].filter(function(e) { return e; }); + var result = spawnSync('npm', args, {encoding: 'utf8'}); + + appPackage.dependencies[key] = result.status === 0 ? + '^' + result.stdout.trim() : + ownPackage.devDependencies[key]; }); ['react-test-renderer'].forEach(function (key) { appPackage.devDependencies[key] = ownPackage.devDependencies[key]; From 40a3e11686fda42366da3234c09af1f6d7695093 Mon Sep 17 00:00:00 2001 From: William Horton Date: Tue, 23 Aug 2016 21:59:12 -0400 Subject: [PATCH 2/5] Run separate npm installs for react, react-dom, and react-test-renderer. --- scripts/init.js | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/scripts/init.js b/scripts/init.js index 60e2bf25228..a1cb6f3ca48 100644 --- a/scripts/init.js +++ b/scripts/init.js @@ -10,7 +10,7 @@ var fs = require('fs-extra'); var path = require('path'); var spawn = require('cross-spawn'); -var spawnSync = require('cross-spawn').sync; +var spawnSync = spawn.sync; var pathExists = require('path-exists'); var chalk = require('chalk'); @@ -18,27 +18,10 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { var ownPath = path.join(appPath, 'node_modules', 'react-scripts'); var appPackage = require(path.join(appPath, 'package.json')); - var ownPackage = require(path.join(ownPath, 'package.json')); // Copy over some of the devDependencies appPackage.dependencies = appPackage.dependencies || {}; appPackage.devDependencies = appPackage.devDependencies || {}; - ['react', 'react-dom'].forEach(function (key) { - var args = [ - 'view', - key, - 'version', - verbose && '--verbose' - ].filter(function(e) { return e; }); - var result = spawnSync('npm', args, {encoding: 'utf8'}); - - appPackage.dependencies[key] = result.status === 0 ? - '^' + result.stdout.trim() : - ownPackage.devDependencies[key]; - }); - ['react-test-renderer'].forEach(function (key) { - appPackage.devDependencies[key] = ownPackage.devDependencies[key]; - }); // Setup the script rules appPackage.scripts = {}; @@ -79,21 +62,28 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { } }); - // Run another npm install for react and react-dom + // Run npm installs for react and react-dom console.log('Installing react and react-dom from npm...'); console.log(); // TODO: having to do two npm installs is bad, can we avoid it? - var args = [ - 'install', - verbose && '--verbose' - ].filter(function(e) { return e; }); - var proc = spawn('npm', args, {stdio: 'inherit'}); - proc.on('close', function (code) { - if (code !== 0) { + + var installFailed; + ['react', 'react-dom', 'react-test-renderer'].forEach(function (pkg) { + var args = [ + 'install', + pkg, + pkg === 'react-test-renderer' ? '--save-dev' : '--save', + verbose && '--verbose' + ].filter(function(e) { return e; }); + var result = spawnSync('npm', args, {stdio: 'inherit'}); + + if (result.status !== 0) { console.error('`npm ' + args.join(' ') + '` failed'); - return; + installFailed = true; } + }); + if (!installFailed) { // Display the most elegant way to cd. // This needs to handle an undefined originalDirectory for // backward compatibility with old global-cli's. @@ -123,5 +113,5 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { } console.log(); console.log('Happy hacking!'); - }); + } }; From fc701f1f49daa9e33176a97d730dfabb00654cb2 Mon Sep 17 00:00:00 2001 From: William Horton Date: Wed, 24 Aug 2016 21:58:49 -0400 Subject: [PATCH 3/5] Consolidate into a single npm install. --- scripts/init.js | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/scripts/init.js b/scripts/init.js index a1cb6f3ca48..a6355bf5018 100644 --- a/scripts/init.js +++ b/scripts/init.js @@ -10,7 +10,6 @@ var fs = require('fs-extra'); var path = require('path'); var spawn = require('cross-spawn'); -var spawnSync = spawn.sync; var pathExists = require('path-exists'); var chalk = require('chalk'); @@ -62,28 +61,25 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { } }); - // Run npm installs for react and react-dom + // Run another npm install for react and react-dom console.log('Installing react and react-dom from npm...'); console.log(); // TODO: having to do two npm installs is bad, can we avoid it? - - var installFailed; - ['react', 'react-dom', 'react-test-renderer'].forEach(function (pkg) { - var args = [ - 'install', - pkg, - pkg === 'react-test-renderer' ? '--save-dev' : '--save', - verbose && '--verbose' - ].filter(function(e) { return e; }); - var result = spawnSync('npm', args, {stdio: 'inherit'}); - - if (result.status !== 0) { + var args = [ + 'install', + 'react', + 'react-dom', + 'react-test-renderer', + '--save', + verbose && '--verbose' + ].filter(function(e) { return e; }); + var proc = spawn('npm', args, {stdio: 'inherit'}) + proc.on('close', function (code) { + if (code !== 0) { console.error('`npm ' + args.join(' ') + '` failed'); - installFailed = true; + return; } - }); - if (!installFailed) { // Display the most elegant way to cd. // This needs to handle an undefined originalDirectory for // backward compatibility with old global-cli's. @@ -114,4 +110,4 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { console.log(); console.log('Happy hacking!'); } -}; +}); From 33640a96f3d8e51a1067a1dd0de02e7d246d1bcc Mon Sep 17 00:00:00 2001 From: William Horton Date: Wed, 24 Aug 2016 22:00:35 -0400 Subject: [PATCH 4/5] Fix misplaced parenthesis, add missing semicolon. --- scripts/init.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/init.js b/scripts/init.js index a6355bf5018..78526552674 100644 --- a/scripts/init.js +++ b/scripts/init.js @@ -73,7 +73,7 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { '--save', verbose && '--verbose' ].filter(function(e) { return e; }); - var proc = spawn('npm', args, {stdio: 'inherit'}) + var proc = spawn('npm', args, {stdio: 'inherit'}); proc.on('close', function (code) { if (code !== 0) { console.error('`npm ' + args.join(' ') + '` failed'); @@ -109,5 +109,5 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { } console.log(); console.log('Happy hacking!'); - } -}); + }); +} From 4680dd5c62d3ce8a2ee0499f2d1fc467ae00a3f9 Mon Sep 17 00:00:00 2001 From: William Horton Date: Wed, 24 Aug 2016 22:04:21 -0400 Subject: [PATCH 5/5] Add missing semicolon. --- scripts/init.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/init.js b/scripts/init.js index 78526552674..14ace414295 100644 --- a/scripts/init.js +++ b/scripts/init.js @@ -110,4 +110,4 @@ module.exports = function(appPath, appName, verbose, originalDirectory) { console.log(); console.log('Happy hacking!'); }); -} +};