Skip to content

Commit d2baa3c

Browse files
dallonfgaearon
authored andcommitted
Symlink-friendly path resolution (#277)
* 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. * Fix relative paths in post-eject case because I'm an idiot * Renamed resolveLib to resolveOwn
1 parent 19580a8 commit d2baa3c

File tree

1 file changed

+31
-27
lines changed

1 file changed

+31
-27
lines changed

config/paths.js

+31-27
Original file line numberDiff line numberDiff line change
@@ -12,53 +12,57 @@
1212

1313
var path = require('path');
1414

15-
// True when used as a dependency, false after ejecting
16-
var isInNodeModules = (
17-
'node_modules' ===
18-
path.basename(path.resolve(path.join(__dirname, '..', '..')))
15+
// True after ejecting, false when used as a dependency
16+
var isEjected = (
17+
path.resolve(path.join(__dirname, '..')) ===
18+
path.resolve(process.cwd())
1919
);
2020

2121
// Are we developing create-react-app locally?
2222
var isInCreateReactAppSource = (
2323
process.argv.some(arg => arg.indexOf('--debug-template') > -1)
2424
);
2525

26-
function resolve(relativePath) {
26+
function resolveOwn(relativePath) {
2727
return path.resolve(__dirname, relativePath);
2828
}
2929

30+
function resolveApp(relativePath) {
31+
return path.resolve(relativePath);
32+
}
33+
3034
if (isInCreateReactAppSource) {
3135
// create-react-app development: we're in ./config/
3236
module.exports = {
33-
appBuild: resolve('../build'),
34-
appHtml: resolve('../template/index.html'),
35-
appFavicon: resolve('../template/favicon.ico'),
36-
appPackageJson: resolve('../package.json'),
37-
appSrc: resolve('../template/src'),
38-
appNodeModules: resolve('../node_modules'),
39-
ownNodeModules: resolve('../node_modules')
37+
appBuild: resolveOwn('../build'),
38+
appHtml: resolveOwn('../template/index.html'),
39+
appFavicon: resolveOwn('../template/favicon.ico'),
40+
appPackageJson: resolveOwn('../package.json'),
41+
appSrc: resolveOwn('../template/src'),
42+
appNodeModules: resolveOwn('../node_modules'),
43+
ownNodeModules: resolveOwn('../node_modules')
4044
};
41-
} else if (isInNodeModules) {
45+
} else if (!isEjected) {
4246
// before eject: we're in ./node_modules/react-scripts/config/
4347
module.exports = {
44-
appBuild: resolve('../../../build'),
45-
appHtml: resolve('../../../index.html'),
46-
appFavicon: resolve('../../../favicon.ico'),
47-
appPackageJson: resolve('../../../package.json'),
48-
appSrc: resolve('../../../src'),
49-
appNodeModules: resolve('../..'),
48+
appBuild: resolveApp('build'),
49+
appHtml: resolveApp('index.html'),
50+
appFavicon: resolveApp('favicon.ico'),
51+
appPackageJson: resolveApp('package.json'),
52+
appSrc: resolveApp('src'),
53+
appNodeModules: resolveApp('node_modules'),
5054
// this is empty with npm3 but node resolution searches higher anyway:
51-
ownNodeModules: resolve('../node_modules')
55+
ownNodeModules: resolveOwn('../node_modules')
5256
};
5357
} else {
5458
// after eject: we're in ./config/
5559
module.exports = {
56-
appBuild: resolve('../build'),
57-
appHtml: resolve('../index.html'),
58-
appFavicon: resolve('../favicon.ico'),
59-
appPackageJson: resolve('../package.json'),
60-
appSrc: resolve('../src'),
61-
appNodeModules: resolve('../node_modules'),
62-
ownNodeModules: resolve('../node_modules')
60+
appBuild: resolveApp('build'),
61+
appHtml: resolveApp('index.html'),
62+
appFavicon: resolveApp('favicon.ico'),
63+
appPackageJson: resolveApp('package.json'),
64+
appSrc: resolveApp('src'),
65+
appNodeModules: resolveApp('node_modules'),
66+
ownNodeModules: resolveApp('node_modules')
6367
};
6468
}

0 commit comments

Comments
 (0)