From d66f3fd9918091086659012ec1d8138b9c460403 Mon Sep 17 00:00:00 2001 From: Valeriy Sorokobatko Date: Fri, 6 Jan 2017 15:59:10 +0200 Subject: [PATCH 1/6] add npm-link support --- packages/react-scripts/config/paths.js | 6 +++++- packages/react-scripts/scripts/eject.js | 21 +++++++++++++++---- .../utils/isReactScriptsLinked.js | 7 +++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 packages/react-scripts/utils/isReactScriptsLinked.js diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index 7d114080f7c..af66869b309 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -13,6 +13,10 @@ var path = require('path'); var fs = require('fs'); var url = require('url'); +// @remove-on-eject-begin +var isReactScriptsLinked = require('../utils/isReactScriptsLinked'); +// @remove-on-eject-end + // Make sure any symlinks in the project folder are resolved: // https://github.com/facebookincubator/create-react-app/issues/637 var appDirectory = fs.realpathSync(process.cwd()); @@ -113,7 +117,7 @@ module.exports = { }; // config before publish: we're in ./packages/react-scripts/config/ -if (__dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1) { +if (!isReactScriptsLinked() && __dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1) { module.exports = { appBuild: resolveOwn('../../../build'), appPublic: resolveOwn('../template/public'), diff --git a/packages/react-scripts/scripts/eject.js b/packages/react-scripts/scripts/eject.js index a8ee0fc3102..70a2a02af28 100644 --- a/packages/react-scripts/scripts/eject.js +++ b/packages/react-scripts/scripts/eject.js @@ -11,12 +11,15 @@ var createJestConfig = require('../utils/createJestConfig'); var fs = require('fs-extra'); var path = require('path'); var paths = require('../config/paths'); +var isReactScriptsLinked = require('../utils/isReactScriptsLinked'); var prompt = require('react-dev-utils/prompt'); var spawnSync = require('cross-spawn').sync; var chalk = require('chalk'); var green = chalk.green; var cyan = chalk.cyan; +var reactScriptsLinked = isReactScriptsLinked(); + prompt( 'Are you sure you want to eject? This action is permanent.', false @@ -28,8 +31,15 @@ prompt( console.log('Ejecting...'); + // NOTE: get ownPath and appPath from config/paths.js ? var ownPath = path.join(__dirname, '..'); - var appPath = path.join(ownPath, '..', '..'); + var appPath; + + if (reactScriptsLinked) { + appPath = path.resolve('.'); + } else { + appPath = path.join(ownPath, '..', '..'); + } function verifyAbsent(file) { if (fs.existsSync(path.join(appPath, file))) { @@ -135,7 +145,6 @@ prompt( ); // Add Babel config - console.log(' Adding ' + cyan('Babel') + ' preset'); appPackage.babel = babelConfig; @@ -151,11 +160,15 @@ prompt( if (fs.existsSync(paths.yarnLockFile)) { console.log(cyan('Running yarn...')); - fs.removeSync(ownPath); + if (!reactScriptsLinked) { + fs.removeSync(ownPath); + } spawnSync('yarnpkg', [], {stdio: 'inherit'}); } else { console.log(cyan('Running npm install...')); - fs.removeSync(ownPath); + if (!reactScriptsLinked) { + fs.removeSync(ownPath); + } spawnSync('npm', ['install'], {stdio: 'inherit'}); } console.log(green('Ejected successfully!')); diff --git a/packages/react-scripts/utils/isReactScriptsLinked.js b/packages/react-scripts/utils/isReactScriptsLinked.js new file mode 100644 index 00000000000..65dd375fe7d --- /dev/null +++ b/packages/react-scripts/utils/isReactScriptsLinked.js @@ -0,0 +1,7 @@ +var path = require('path'); +var fs = require('fs'); + +module.exports = () => { + var localReactScriptsPath = path.resolve('node_modules/react-scripts'); + return fs.existsSync(localReactScriptsPath) && fs.lstatSync(localReactScriptsPath).isSymbolicLink(); +}; From 4e91cb3a808a356adbd3f90235602fa9a8364ad8 Mon Sep 17 00:00:00 2001 From: Valerii Sorokobatko Date: Tue, 31 Jan 2017 22:34:12 +0200 Subject: [PATCH 2/6] - remove extra veriable - simplify condition --- packages/react-scripts/scripts/eject.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/react-scripts/scripts/eject.js b/packages/react-scripts/scripts/eject.js index 70a2a02af28..79b217bb0d7 100644 --- a/packages/react-scripts/scripts/eject.js +++ b/packages/react-scripts/scripts/eject.js @@ -11,15 +11,13 @@ var createJestConfig = require('../utils/createJestConfig'); var fs = require('fs-extra'); var path = require('path'); var paths = require('../config/paths'); -var isReactScriptsLinked = require('../utils/isReactScriptsLinked'); +var reactScriptsLinked = require('../utils/isReactScriptsLinked')(); var prompt = require('react-dev-utils/prompt'); var spawnSync = require('cross-spawn').sync; var chalk = require('chalk'); var green = chalk.green; var cyan = chalk.cyan; -var reactScriptsLinked = isReactScriptsLinked(); - prompt( 'Are you sure you want to eject? This action is permanent.', false @@ -33,13 +31,7 @@ prompt( // NOTE: get ownPath and appPath from config/paths.js ? var ownPath = path.join(__dirname, '..'); - var appPath; - - if (reactScriptsLinked) { - appPath = path.resolve('.'); - } else { - appPath = path.join(ownPath, '..', '..'); - } + var appPath = reactScriptsLinked ? path.resolve('.') : path.join(ownPath, '..', '..'); function verifyAbsent(file) { if (fs.existsSync(path.join(appPath, file))) { From d65478491440a3d4304ebd3d104aa0d91c5e14ec Mon Sep 17 00:00:00 2001 From: Valerii Sorokobatko Date: Wed, 15 Feb 2017 13:38:00 +0200 Subject: [PATCH 3/6] update code after review: - remove utils/isReactScriptsLinked - add appPath and ownPath to paths.js (but only for "before eject" export case) --- packages/react-scripts/config/paths.js | 42 ++++++++++--------- packages/react-scripts/scripts/eject.js | 10 ++--- .../utils/isReactScriptsLinked.js | 7 ---- 3 files changed, 27 insertions(+), 32 deletions(-) delete mode 100644 packages/react-scripts/utils/isReactScriptsLinked.js diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index af66869b309..d8d67ee8bd2 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -13,10 +13,6 @@ var path = require('path'); var fs = require('fs'); var url = require('url'); -// @remove-on-eject-begin -var isReactScriptsLinked = require('../utils/isReactScriptsLinked'); -// @remove-on-eject-end - // Make sure any symlinks in the project folder are resolved: // https://github.com/facebookincubator/create-react-app/issues/637 var appDirectory = fs.realpathSync(process.cwd()); @@ -95,11 +91,13 @@ module.exports = { // @remove-on-eject-begin function resolveOwn(relativePath) { - return path.resolve(__dirname, relativePath); + return path.resolve(__dirname, '..', relativePath); } // config before eject: we're in ./node_modules/react-scripts/config/ module.exports = { + appPath: resolveApp('.'), + ownPath: resolveOwn('.'), appBuild: resolveApp('build'), appPublic: resolveApp('public'), appHtml: resolveApp('public/index.html'), @@ -110,28 +108,34 @@ module.exports = { testsSetup: resolveApp('src/setupTests.js'), appNodeModules: resolveApp('node_modules'), // this is empty with npm3 but node resolution searches higher anyway: - ownNodeModules: resolveOwn('../node_modules'), + ownNodeModules: resolveOwn('node_modules'), nodePaths: nodePaths, publicUrl: getPublicUrl(resolveApp('package.json')), servedPath: getServedPath(resolveApp('package.json')) }; + +var reactScriptsPath = path.resolve('node_modules/react-scripts'); +var reactScriptsLinked = fs.existsSync(reactScriptsPath) && fs.lstatSync(reactScriptsPath).isSymbolicLink(); + // config before publish: we're in ./packages/react-scripts/config/ -if (!isReactScriptsLinked() && __dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1) { +if (!reactScriptsLinked && __dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1) { module.exports = { - appBuild: resolveOwn('../../../build'), - appPublic: resolveOwn('../template/public'), - appHtml: resolveOwn('../template/public/index.html'), - appIndexJs: resolveOwn('../template/src/index.js'), - appPackageJson: resolveOwn('../package.json'), - appSrc: resolveOwn('../template/src'), - yarnLockFile: resolveOwn('../template/yarn.lock'), - testsSetup: resolveOwn('../template/src/setupTests.js'), - appNodeModules: resolveOwn('../node_modules'), - ownNodeModules: resolveOwn('../node_modules'), + appPath: resolveApp('.'), + ownPath: resolveOwn('.'), + appBuild: resolveOwn('../../build'), + appPublic: resolveOwn('template/public'), + appHtml: resolveOwn('template/public/index.html'), + appIndexJs: resolveOwn('template/src/index.js'), + appPackageJson: resolveOwn('package.json'), + appSrc: resolveOwn('template/src'), + yarnLockFile: resolveOwn('template/yarn.lock'), + testsSetup: resolveOwn('template/src/setupTests.js'), + appNodeModules: resolveOwn('node_modules'), + ownNodeModules: resolveOwn('node_modules'), nodePaths: nodePaths, - publicUrl: getPublicUrl(resolveOwn('../package.json')), - servedPath: getServedPath(resolveOwn('../package.json')) + publicUrl: getPublicUrl(resolveOwn('package.json')), + servedPath: getServedPath(resolveOwn('package.json')) }; } // @remove-on-eject-end diff --git a/packages/react-scripts/scripts/eject.js b/packages/react-scripts/scripts/eject.js index 79b217bb0d7..ccc9cee5c35 100644 --- a/packages/react-scripts/scripts/eject.js +++ b/packages/react-scripts/scripts/eject.js @@ -11,7 +11,6 @@ var createJestConfig = require('../utils/createJestConfig'); var fs = require('fs-extra'); var path = require('path'); var paths = require('../config/paths'); -var reactScriptsLinked = require('../utils/isReactScriptsLinked')(); var prompt = require('react-dev-utils/prompt'); var spawnSync = require('cross-spawn').sync; var chalk = require('chalk'); @@ -29,9 +28,8 @@ prompt( console.log('Ejecting...'); - // NOTE: get ownPath and appPath from config/paths.js ? - var ownPath = path.join(__dirname, '..'); - var appPath = reactScriptsLinked ? path.resolve('.') : path.join(ownPath, '..', '..'); + var ownPath = paths.ownPath; + var appPath = paths.appPath; function verifyAbsent(file) { if (fs.existsSync(path.join(appPath, file))) { @@ -152,13 +150,13 @@ prompt( if (fs.existsSync(paths.yarnLockFile)) { console.log(cyan('Running yarn...')); - if (!reactScriptsLinked) { + if (ownPath.indexOf(appPath) !== -1) { fs.removeSync(ownPath); } spawnSync('yarnpkg', [], {stdio: 'inherit'}); } else { console.log(cyan('Running npm install...')); - if (!reactScriptsLinked) { + if (ownPath.indexOf(appPath) !== -1) { fs.removeSync(ownPath); } spawnSync('npm', ['install'], {stdio: 'inherit'}); diff --git a/packages/react-scripts/utils/isReactScriptsLinked.js b/packages/react-scripts/utils/isReactScriptsLinked.js deleted file mode 100644 index 65dd375fe7d..00000000000 --- a/packages/react-scripts/utils/isReactScriptsLinked.js +++ /dev/null @@ -1,7 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = () => { - var localReactScriptsPath = path.resolve('node_modules/react-scripts'); - return fs.existsSync(localReactScriptsPath) && fs.lstatSync(localReactScriptsPath).isSymbolicLink(); -}; From f23bdbd45463b100033b9dcc508376ed742a0259 Mon Sep 17 00:00:00 2001 From: Valerii Sorokobatko Date: Wed, 15 Feb 2017 13:56:18 +0200 Subject: [PATCH 4/6] update code after review: - remove utils/isReactScriptsLinked - add appPath and ownPath to paths.js (but only for "before eject" export case) --- packages/react-scripts/config/paths.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index d8d67ee8bd2..7ec4da99727 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -114,7 +114,6 @@ module.exports = { servedPath: getServedPath(resolveApp('package.json')) }; - var reactScriptsPath = path.resolve('node_modules/react-scripts'); var reactScriptsLinked = fs.existsSync(reactScriptsPath) && fs.lstatSync(reactScriptsPath).isSymbolicLink(); From 3f2c3b4441877aa107093a5b1f40a1f6def6d11e Mon Sep 17 00:00:00 2001 From: Valerii Sorokobatko Date: Wed, 15 Feb 2017 14:30:52 +0200 Subject: [PATCH 5/6] update code after review: - remove utils/isReactScriptsLinked - add appPath and ownPath to paths.js (but only for "before eject" export case) - remove "if" block for fs.removeSync(ownPath) at ejec.tjs --- packages/react-scripts/scripts/eject.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/react-scripts/scripts/eject.js b/packages/react-scripts/scripts/eject.js index ccc9cee5c35..473a40da4e1 100644 --- a/packages/react-scripts/scripts/eject.js +++ b/packages/react-scripts/scripts/eject.js @@ -150,15 +150,11 @@ prompt( if (fs.existsSync(paths.yarnLockFile)) { console.log(cyan('Running yarn...')); - if (ownPath.indexOf(appPath) !== -1) { - fs.removeSync(ownPath); - } + fs.removeSync(ownPath); spawnSync('yarnpkg', [], {stdio: 'inherit'}); } else { console.log(cyan('Running npm install...')); - if (ownPath.indexOf(appPath) !== -1) { - fs.removeSync(ownPath); - } + fs.removeSync(ownPath); spawnSync('npm', ['install'], {stdio: 'inherit'}); } console.log(green('Ejected successfully!')); From 927e3a02ffc6303514a4dfddab207ef7e5c661a7 Mon Sep 17 00:00:00 2001 From: Valerii Sorokobatko Date: Wed, 15 Feb 2017 15:35:09 +0200 Subject: [PATCH 6/6] change ownPath value --- packages/react-scripts/config/paths.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index 7ec4da99727..7ad1fc95c89 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -97,7 +97,7 @@ function resolveOwn(relativePath) { // config before eject: we're in ./node_modules/react-scripts/config/ module.exports = { appPath: resolveApp('.'), - ownPath: resolveOwn('.'), + ownPath: resolveApp('node_modules/react-scripts'), appBuild: resolveApp('build'), appPublic: resolveApp('public'), appHtml: resolveApp('public/index.html'),