From 0bf6c9d4bb14be5d1022c9c85b4441f2e1c1135e Mon Sep 17 00:00:00 2001 From: ev1stensberg Date: Tue, 8 May 2018 01:26:20 +0200 Subject: [PATCH 1/3] cli(init): revise installation steps --- lib/generators/init-generator.js | 13 ++++++++++--- lib/utils/package-manager.js | 14 +++++++++++--- package-lock.json | 2 +- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index efd7db24439..282ed6b9faf 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -409,9 +409,16 @@ module.exports = class InitGenerator extends Generator { }) .then(() => { asyncNamePrompt(); - this.runInstall(getPackageManager(), this.dependencies, { - "save-dev": true - }); + const packager = getPackageManager(); + const opts = + packager === "yarn" + ? { + "dev": true + } + : { + "save-dev": true + }; + this.runInstall(packager, this.dependencies, opts); }); } diff --git a/lib/utils/package-manager.js b/lib/utils/package-manager.js index 819f3ba0a35..cb67afa9539 100644 --- a/lib/utils/package-manager.js +++ b/lib/utils/package-manager.js @@ -64,11 +64,19 @@ function spawnChild(pkg) { */ function getPackageManager() { - if (spawn.sync("yarn", [" --version"], { stdio: "ignore" }).error) { + const hasLocalNPM = fs.existsSync( + path.resolve(process.cwd(), "package-lock.json") + ); + const hasLocalYarn = fs.existsSync(path.resolve(process.cwd(), "yarn.lock")); + if (hasLocalNPM) { return "npm"; + } else if (hasLocalYarn) { + return "yarn"; + } else if (spawn.sync("yarn", [" --version"], { stdio: "ignore" }).error) { + return "npm"; + } else { + return "yarn"; } - - return "yarn"; } /** diff --git a/package-lock.json b/package-lock.json index fa5139cf6d8..aec79ae11cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "webpack-cli", - "version": "2.1.3", + "version": "0.0.0-development", "lockfileVersion": 1, "requires": true, "dependencies": { From fe63abb84fcc7849aba2b6a9c622eb7b460a9c0a Mon Sep 17 00:00:00 2001 From: ev1stensberg Date: Tue, 8 May 2018 01:37:42 +0200 Subject: [PATCH 2/3] chore(formatting): format code --- lib/generators/init-generator.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index 282ed6b9faf..2e3b07c00d7 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -410,14 +410,7 @@ module.exports = class InitGenerator extends Generator { .then(() => { asyncNamePrompt(); const packager = getPackageManager(); - const opts = - packager === "yarn" - ? { - "dev": true - } - : { - "save-dev": true - }; + const opts = packager === "yarn" ? { dev: true } : { "save-dev": true }; this.runInstall(packager, this.dependencies, opts); }); } From bd21336852dc64202dd617550b156f6d1fe8ebd8 Mon Sep 17 00:00:00 2001 From: ev1stensberg Date: Tue, 8 May 2018 02:10:28 +0200 Subject: [PATCH 3/3] cli(tests): refactor tests --- lib/utils/package-manager.test.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/utils/package-manager.test.js b/lib/utils/package-manager.test.js index c99fa0bbf79..b0d5ee6c4ed 100644 --- a/lib/utils/package-manager.test.js +++ b/lib/utils/package-manager.test.js @@ -34,6 +34,22 @@ describe("package-manager", () => { mockSpawnErrorOnce(); } + function mockUpdateYarnOnce() { + fs.existsSync.mockReturnValueOnce(false); + fs.existsSync.mockReturnValueOnce(true); + fs.existsSync.mockReturnValueOnce(false); + fs.existsSync.mockReturnValueOnce(true); + fs.existsSync.mockReturnValueOnce(true); + } + + function mockUpdateNPMOnce() { + fs.existsSync.mockReturnValueOnce(true); + fs.existsSync.mockReturnValueOnce(false); + fs.existsSync.mockReturnValueOnce(true); + fs.existsSync.mockReturnValueOnce(true); + fs.existsSync.mockReturnValueOnce(true); + } + spawn.sync.mockReturnValue(defaultSyncResult); it("should return 'yarn' from getPackageManager if it's installed", () => { @@ -59,7 +75,7 @@ describe("package-manager", () => { it("should spawn yarn upgrade from spawnChild", () => { const packageName = "some-pkg"; - fs.existsSync.mockReturnValueOnce(true); + mockUpdateYarnOnce(); packageManager.spawnChild(packageName); expect(spawn.sync).toHaveBeenLastCalledWith( @@ -84,8 +100,7 @@ describe("package-manager", () => { it("should spawn npm update from spawnChild", () => { const packageName = "some-pkg"; - mockSpawnErrorTwice(); - fs.existsSync.mockReturnValueOnce(true); + mockUpdateNPMOnce(); packageManager.spawnChild(packageName); expect(spawn.sync).toHaveBeenLastCalledWith(