mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-04-23 12:48:00 +08:00
Fix ejecting from a scoped fork (#1727)
* Read script names from own bin instead of guessing This fixes ejecting from a fork that uses a different bin script name. * Fix ejecting for a scoped react-scripts fork We shouldn't hardcode react-scripts because fork name might differ. We also shouldn't rely on it being an immediate child because scoped packages are a level deeper. * Clarify that own* properties only exist before ejecting
This commit is contained in:
16
packages/react-scripts/config/paths.js
vendored
16
packages/react-scripts/config/paths.js
vendored
@@ -83,7 +83,6 @@ module.exports = {
|
||||
yarnLockFile: resolveApp('yarn.lock'),
|
||||
testsSetup: resolveApp('src/setupTests.js'),
|
||||
appNodeModules: resolveApp('node_modules'),
|
||||
ownNodeModules: resolveApp('node_modules'),
|
||||
nodePaths: nodePaths,
|
||||
publicUrl: getPublicUrl(resolveApp('package.json')),
|
||||
servedPath: getServedPath(resolveApp('package.json'))
|
||||
@@ -97,7 +96,6 @@ function resolveOwn(relativePath) {
|
||||
// config before eject: we're in ./node_modules/react-scripts/config/
|
||||
module.exports = {
|
||||
appPath: resolveApp('.'),
|
||||
ownPath: resolveApp('node_modules/react-scripts'),
|
||||
appBuild: resolveApp('build'),
|
||||
appPublic: resolveApp('public'),
|
||||
appHtml: resolveApp('public/index.html'),
|
||||
@@ -107,11 +105,12 @@ module.exports = {
|
||||
yarnLockFile: resolveApp('yarn.lock'),
|
||||
testsSetup: resolveApp('src/setupTests.js'),
|
||||
appNodeModules: resolveApp('node_modules'),
|
||||
// this is empty with npm3 but node resolution searches higher anyway:
|
||||
ownNodeModules: resolveOwn('node_modules'),
|
||||
nodePaths: nodePaths,
|
||||
publicUrl: getPublicUrl(resolveApp('package.json')),
|
||||
servedPath: getServedPath(resolveApp('package.json'))
|
||||
servedPath: getServedPath(resolveApp('package.json')),
|
||||
// These properties only exist before ejecting:
|
||||
ownPath: resolveOwn('.'),
|
||||
ownNodeModules: resolveOwn('node_modules'), // This is empty on npm 3
|
||||
};
|
||||
|
||||
var reactScriptsPath = path.resolve('node_modules/react-scripts');
|
||||
@@ -121,7 +120,6 @@ var reactScriptsLinked = fs.existsSync(reactScriptsPath) && fs.lstatSync(reactSc
|
||||
if (!reactScriptsLinked && __dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1) {
|
||||
module.exports = {
|
||||
appPath: resolveApp('.'),
|
||||
ownPath: resolveOwn('.'),
|
||||
appBuild: resolveOwn('../../build'),
|
||||
appPublic: resolveOwn('template/public'),
|
||||
appHtml: resolveOwn('template/public/index.html'),
|
||||
@@ -131,10 +129,12 @@ if (!reactScriptsLinked && __dirname.indexOf(path.join('packages', 'react-script
|
||||
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'))
|
||||
servedPath: getServedPath(resolveOwn('package.json')),
|
||||
// These properties only exist before ejecting:
|
||||
ownPath: resolveOwn('.'),
|
||||
ownNodeModules: resolveOwn('node_modules'),
|
||||
};
|
||||
}
|
||||
// @remove-on-eject-end
|
||||
|
||||
19
packages/react-scripts/scripts/eject.js
vendored
19
packages/react-scripts/scripts/eject.js
vendored
@@ -120,14 +120,17 @@ prompt(
|
||||
console.log(cyan('Updating the scripts'));
|
||||
delete appPackage.scripts['eject'];
|
||||
Object.keys(appPackage.scripts).forEach(function (key) {
|
||||
appPackage.scripts[key] = appPackage.scripts[key]
|
||||
.replace(/react-scripts (\w+)/g, 'node scripts/$1.js');
|
||||
console.log(
|
||||
' Replacing ' +
|
||||
cyan('"react-scripts ' + key + '"') +
|
||||
' with ' +
|
||||
cyan('"node scripts/' + key + '.js"')
|
||||
);
|
||||
Object.keys(ownPackage.bin).forEach(function (binKey) {
|
||||
var regex = new RegExp(binKey + ' (\\w+)', 'g');
|
||||
appPackage.scripts[key] = appPackage.scripts[key]
|
||||
.replace(regex, 'node scripts/$1.js');
|
||||
console.log(
|
||||
' Replacing ' +
|
||||
cyan('"' + binKey + ' ' + key + '"') +
|
||||
' with ' +
|
||||
cyan('"node scripts/' + key + '.js"')
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
console.log();
|
||||
|
||||
Reference in New Issue
Block a user