From 66f62a6da5e4f5693922634e4ec189f48c35dcbf Mon Sep 17 00:00:00 2001 From: Dallon Feldner Date: Fri, 29 Jul 2016 09:48:34 -0500 Subject: [PATCH 1/3] Symlink-friendly path resolution I was having difficulties using a local copy of `react-scripts` and `npm link`ing it into a real world project. This change resolves paths relative to the current working directory (that is, most likely the directory of the app) rather than assuming a certain directory structure. --- config/paths.js | 58 ++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/config/paths.js b/config/paths.js index b0f94588adb..c200115fe00 100644 --- a/config/paths.js +++ b/config/paths.js @@ -12,10 +12,10 @@ var path = require('path'); -// True when used as a dependency, false after ejecting -var isInNodeModules = ( - 'node_modules' === - path.basename(path.resolve(path.join(__dirname, '..', '..'))) +// True after ejecting, false when used as a dependency +var isEjected = ( + path.resolve(path.join(__dirname, '..')) === + path.resolve(process.cwd()) ); // Are we developing create-react-app locally? @@ -23,42 +23,46 @@ var isInCreateReactAppSource = ( process.argv.some(arg => arg.indexOf('--debug-template') > -1) ); -function resolve(relativePath) { +function resolveLib(relativePath) { return path.resolve(__dirname, relativePath); } +function resolveApp(relativePath) { + return path.resolve(relativePath); +} + if (isInCreateReactAppSource) { // create-react-app development: we're in ./config/ module.exports = { - appBuild: resolve('../build'), - appHtml: resolve('../template/index.html'), - appFavicon: resolve('../template/favicon.ico'), - appPackageJson: resolve('../package.json'), - appSrc: resolve('../template/src'), - appNodeModules: resolve('../node_modules'), - ownNodeModules: resolve('../node_modules') + appBuild: resolveLib('../build'), + appHtml: resolveLib('../template/index.html'), + appFavicon: resolveLib('../template/favicon.ico'), + appPackageJson: resolveLib('../package.json'), + appSrc: resolveLib('../template/src'), + appNodeModules: resolveLib('../node_modules'), + ownNodeModules: resolveLib('../node_modules') }; -} else if (isInNodeModules) { +} else if (!isEjected) { // before eject: we're in ./node_modules/react-scripts/config/ module.exports = { - appBuild: resolve('../../../build'), - appHtml: resolve('../../../index.html'), - appFavicon: resolve('../../../favicon.ico'), - appPackageJson: resolve('../../../package.json'), - appSrc: resolve('../../../src'), - appNodeModules: resolve('../..'), + appBuild: resolveApp('build'), + appHtml: resolveApp('index.html'), + appFavicon: resolveApp('favicon.ico'), + appPackageJson: resolveApp('package.json'), + appSrc: resolveApp('src'), + appNodeModules: resolveApp('node_modules'), // this is empty with npm3 but node resolution searches higher anyway: - ownNodeModules: resolve('../node_modules') + ownNodeModules: resolveLib('../node_modules') }; } else { // after eject: we're in ./config/ module.exports = { - appBuild: resolve('../build'), - appHtml: resolve('../index.html'), - appFavicon: resolve('../favicon.ico'), - appPackageJson: resolve('../package.json'), - appSrc: resolve('../src'), - appNodeModules: resolve('../node_modules'), - ownNodeModules: resolve('../node_modules') + appBuild: resolveApp('../build'), + appHtml: resolveApp('../index.html'), + appFavicon: resolveApp('../favicon.ico'), + appPackageJson: resolveApp('../package.json'), + appSrc: resolveApp('../src'), + appNodeModules: resolveApp('../node_modules'), + ownNodeModules: resolveApp('../node_modules') }; } From ebac36004c9bebf0c650a718847f6e65f533f8b6 Mon Sep 17 00:00:00 2001 From: Dallon Feldner Date: Fri, 29 Jul 2016 10:17:59 -0500 Subject: [PATCH 2/3] Fix relative paths in post-eject case because I'm an idiot --- config/paths.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/config/paths.js b/config/paths.js index c200115fe00..e15391068df 100644 --- a/config/paths.js +++ b/config/paths.js @@ -57,12 +57,12 @@ if (isInCreateReactAppSource) { } else { // after eject: we're in ./config/ module.exports = { - appBuild: resolveApp('../build'), - appHtml: resolveApp('../index.html'), - appFavicon: resolveApp('../favicon.ico'), - appPackageJson: resolveApp('../package.json'), - appSrc: resolveApp('../src'), - appNodeModules: resolveApp('../node_modules'), - ownNodeModules: resolveApp('../node_modules') + appBuild: resolveApp('build'), + appHtml: resolveApp('index.html'), + appFavicon: resolveApp('favicon.ico'), + appPackageJson: resolveApp('package.json'), + appSrc: resolveApp('src'), + appNodeModules: resolveApp('node_modules'), + ownNodeModules: resolveApp('node_modules') }; } From 7eace51aa85407b458c37d2d844ec987d37b0e34 Mon Sep 17 00:00:00 2001 From: Dallon Feldner Date: Fri, 29 Jul 2016 10:50:28 -0500 Subject: [PATCH 3/3] Renamed resolveLib to resolveOwn --- config/paths.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/config/paths.js b/config/paths.js index e15391068df..7645917fbc9 100644 --- a/config/paths.js +++ b/config/paths.js @@ -23,7 +23,7 @@ var isInCreateReactAppSource = ( process.argv.some(arg => arg.indexOf('--debug-template') > -1) ); -function resolveLib(relativePath) { +function resolveOwn(relativePath) { return path.resolve(__dirname, relativePath); } @@ -34,13 +34,13 @@ function resolveApp(relativePath) { if (isInCreateReactAppSource) { // create-react-app development: we're in ./config/ module.exports = { - appBuild: resolveLib('../build'), - appHtml: resolveLib('../template/index.html'), - appFavicon: resolveLib('../template/favicon.ico'), - appPackageJson: resolveLib('../package.json'), - appSrc: resolveLib('../template/src'), - appNodeModules: resolveLib('../node_modules'), - ownNodeModules: resolveLib('../node_modules') + appBuild: resolveOwn('../build'), + appHtml: resolveOwn('../template/index.html'), + appFavicon: resolveOwn('../template/favicon.ico'), + appPackageJson: resolveOwn('../package.json'), + appSrc: resolveOwn('../template/src'), + appNodeModules: resolveOwn('../node_modules'), + ownNodeModules: resolveOwn('../node_modules') }; } else if (!isEjected) { // before eject: we're in ./node_modules/react-scripts/config/ @@ -52,7 +52,7 @@ if (isInCreateReactAppSource) { appSrc: resolveApp('src'), appNodeModules: resolveApp('node_modules'), // this is empty with npm3 but node resolution searches higher anyway: - ownNodeModules: resolveLib('../node_modules') + ownNodeModules: resolveOwn('../node_modules') }; } else { // after eject: we're in ./config/