Skip to content

Commit 9d3b101

Browse files
GreenGremlinPavel Zhytko
authored and
Pavel Zhytko
committed
Allowing "file:<path>" --scripts-version values (facebook#3629)
* Allowing for local "file:" prefixed scripts packages * Fixing test failure
1 parent c905165 commit 9d3b101

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

packages/create-react-app/createReactApp.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ function run(
268268
template,
269269
useYarn
270270
) {
271-
const packageToInstall = getInstallPackage(version);
271+
const packageToInstall = getInstallPackage(version, originalDirectory);
272272
const allDependencies = ['react', 'react-dom', packageToInstall];
273273

274274
console.log('Installing packages. This might take a couple of minutes.');
@@ -365,11 +365,16 @@ function run(
365365
});
366366
}
367367

368-
function getInstallPackage(version) {
368+
function getInstallPackage(version, originalDirectory) {
369369
let packageToInstall = 'react-scripts';
370370
const validSemver = semver.valid(version);
371371
if (validSemver) {
372372
packageToInstall += `@${validSemver}`;
373+
} else if (version && version.match(/^file:/)) {
374+
packageToInstall = `file:${path.resolve(
375+
originalDirectory,
376+
version.match(/^file:(.*)?$/)[1]
377+
)}`;
373378
} else if (version) {
374379
// for tar.gz or alternative paths
375380
packageToInstall = version;
@@ -459,6 +464,10 @@ function getPackageName(installPackage) {
459464
return Promise.resolve(
460465
installPackage.charAt(0) + installPackage.substr(1).split('@')[0]
461466
);
467+
} else if (installPackage.match(/^file:/)) {
468+
const installPackagePath = installPackage.match(/^file:(.*)?$/)[1];
469+
const installPackageJson = require(path.join(installPackagePath, 'package.json'));
470+
return Promise.resolve(installPackageJson.name);
462471
}
463472
return Promise.resolve(installPackage);
464473
}

0 commit comments

Comments
 (0)