From 554b2024c39beae4c7de43e6f4b2f6d0b76fc8e2 Mon Sep 17 00:00:00 2001 From: Tom Valorsa <tomvalorsa@gmail.com> Date: Fri, 22 May 2020 08:36:41 +0100 Subject: [PATCH 1/2] Replace (npm run | npm) globally when adjusting package scripts for Yarn users --- packages/react-scripts/scripts/init.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/scripts/init.js b/packages/react-scripts/scripts/init.js index d064e5db1..732c4b40d 100644 --- a/packages/react-scripts/scripts/init.js +++ b/packages/react-scripts/scripts/init.js @@ -203,7 +203,7 @@ module.exports = function ( appPackage.scripts = Object.entries(appPackage.scripts).reduce( (acc, [key, value]) => ({ ...acc, - [key]: value.replace(/(npm run |npm )/, 'yarn '), + [key]: value.replace(/(npm run |npm )/g, 'yarn '), }), {} ); -- GitLab From 973846419a735fd9b00d8b53a64549cf56a2053a Mon Sep 17 00:00:00 2001 From: Tom Valorsa <tomvalorsa@gmail.com> Date: Sat, 23 May 2020 09:24:16 +0100 Subject: [PATCH 2/2] Split replaceNpmScriptsWithYarn into separate function, add tests --- packages/react-scripts/scripts/init.js | 9 ++--- .../replaceNpmScriptsWithYarn.test.js | 33 +++++++++++++++++++ .../utils/replaceNpmScriptsWithYarn.js | 13 ++++++++ 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 packages/react-scripts/scripts/utils/__tests__/replaceNpmScriptsWithYarn.test.js create mode 100644 packages/react-scripts/scripts/utils/replaceNpmScriptsWithYarn.js diff --git a/packages/react-scripts/scripts/init.js b/packages/react-scripts/scripts/init.js index 732c4b40d..c13515b37 100644 --- a/packages/react-scripts/scripts/init.js +++ b/packages/react-scripts/scripts/init.js @@ -22,6 +22,7 @@ const spawn = require('react-dev-utils/crossSpawn'); const { defaultBrowsers } = require('react-dev-utils/browsersHelper'); const os = require('os'); const verifyTypeScriptSetup = require('./utils/verifyTypeScriptSetup'); +const replaceNpmScriptsWithYarn = require('./utils/replaceNpmScriptsWithYarn'); function isInGitRepository() { try { @@ -200,13 +201,7 @@ module.exports = function ( // Update scripts for Yarn users if (useYarn) { - appPackage.scripts = Object.entries(appPackage.scripts).reduce( - (acc, [key, value]) => ({ - ...acc, - [key]: value.replace(/(npm run |npm )/g, 'yarn '), - }), - {} - ); + appPackage.scripts = replaceNpmScriptsWithYarn(appPackage.scripts); } // Setup the eslint config diff --git a/packages/react-scripts/scripts/utils/__tests__/replaceNpmScriptsWithYarn.test.js b/packages/react-scripts/scripts/utils/__tests__/replaceNpmScriptsWithYarn.test.js new file mode 100644 index 000000000..429b01357 --- /dev/null +++ b/packages/react-scripts/scripts/utils/__tests__/replaceNpmScriptsWithYarn.test.js @@ -0,0 +1,33 @@ +'use strict'; + +const replaceNpmScriptsWithYarn = require('../replaceNpmScriptsWithYarn'); + +describe('replaceNpmScriptsWithYarn util function', () => { + test('replaces single npm scripts with yarn', () => { + const scripts = { + test: 'npm run test', + example: 'npm example', + }; + + const actual = replaceNpmScriptsWithYarn(scripts); + const expected = { + test: 'yarn test', + example: 'yarn example', + }; + + expect(actual).toEqual(expected); + }); + + test('replaces chained npm scripts with yarn', () => { + const scripts = { + 'pre-commit': 'npm run prettier && npm run lint && npm test', + }; + + const actual = replaceNpmScriptsWithYarn(scripts); + const expected = { + 'pre-commit': 'yarn prettier && yarn lint && yarn test', + }; + + expect(actual).toEqual(expected); + }); +}); diff --git a/packages/react-scripts/scripts/utils/replaceNpmScriptsWithYarn.js b/packages/react-scripts/scripts/utils/replaceNpmScriptsWithYarn.js new file mode 100644 index 000000000..9a309f3f3 --- /dev/null +++ b/packages/react-scripts/scripts/utils/replaceNpmScriptsWithYarn.js @@ -0,0 +1,13 @@ +'use strict'; + +const replaceNpmScriptsWithYarn = scripts => { + return Object.entries(scripts).reduce( + (acc, [key, value]) => ({ + ...acc, + [key]: value.replace(/(npm run |npm )/g, 'yarn '), + }), + {} + ); +}; + +module.exports = replaceNpmScriptsWithYarn; -- GitLab