From 68627139a59862cb7b4c1126c0d11cc05c67c232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Mon, 1 Oct 2018 15:13:55 +0100 Subject: [PATCH] Adds a --use-pnp option --- packages/create-react-app/createReactApp.js | 40 +++++++++++++++++---- tasks/e2e-installs.sh | 3 +- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/packages/create-react-app/createReactApp.js b/packages/create-react-app/createReactApp.js index 8bd6c352937..132d55a8373 100755 --- a/packages/create-react-app/createReactApp.js +++ b/packages/create-react-app/createReactApp.js @@ -76,6 +76,7 @@ const program = new commander.Command(packageJson.name) 'use a non-standard version of react-scripts' ) .option('--use-npm') + .option('--use-pnp') .allowUnknownOption() .on('--help', () => { console.log(` Only ${chalk.green('')} is required.`); @@ -178,10 +179,11 @@ createApp( program.verbose, program.scriptsVersion, program.useNpm, + program.usePnp, hiddenProgram.internalTestingTemplate ); -function createApp(name, verbose, version, useNpm, template) { +function createApp(name, verbose, version, useNpm, usePnp, template) { const root = path.resolve(name); const appName = path.basename(root); @@ -241,7 +243,16 @@ function createApp(name, verbose, version, useNpm, template) { version = 'react-scripts@0.9.x'; } } - run(root, appName, version, verbose, originalDirectory, template, useYarn); + run( + root, + appName, + version, + verbose, + originalDirectory, + template, + useYarn, + usePnp + ); } function shouldUseYarn() { @@ -253,7 +264,7 @@ function shouldUseYarn() { } } -function install(root, useYarn, dependencies, verbose, isOnline) { +function install(root, useYarn, usePnp, dependencies, verbose, isOnline) { return new Promise((resolve, reject) => { let command; let args; @@ -263,6 +274,9 @@ function install(root, useYarn, dependencies, verbose, isOnline) { if (!isOnline) { args.push('--offline'); } + if (usePnp) { + args.push('--enable-pnp'); + } [].push.apply(args, dependencies); // Explicitly set cwd() to work around issues like @@ -287,6 +301,12 @@ function install(root, useYarn, dependencies, verbose, isOnline) { '--loglevel', 'error', ].concat(dependencies); + + if (usePnp) { + console.log(chalk.yellow("NPM doesn't support PnP.")); + console.log(chalk.yellow('Falling back to the regular installs.')); + console.log(); + } } if (verbose) { @@ -313,7 +333,8 @@ function run( verbose, originalDirectory, template, - useYarn + useYarn, + usePnp ) { const packageToInstall = getInstallPackage(version, originalDirectory); const allDependencies = ['react', 'react-dom', packageToInstall]; @@ -336,9 +357,14 @@ function run( ); console.log(); - return install(root, useYarn, allDependencies, verbose, isOnline).then( - () => packageName - ); + return install( + root, + useYarn, + usePnp, + allDependencies, + verbose, + isOnline + ).then(() => packageName); }) .then(async packageName => { checkNodeVersion(packageName); diff --git a/tasks/e2e-installs.sh b/tasks/e2e-installs.sh index c0776c84efc..e402ee5c88a 100755 --- a/tasks/e2e-installs.sh +++ b/tasks/e2e-installs.sh @@ -233,8 +233,7 @@ yarn start --smoke-test # Test when PnP is enabled # ****************************************************************************** cd "$temp_app_path" -echo $OSTYPE -YARN_PLUGNPLAY_OVERRIDE=1 npx create-react-app test-app-pnp +npx create-react-app test-app-pnp --use-pnp cd test-app-pnp ! exists node_modules exists .pnp.js