From 3299f8205ec3112e4e8ef9fa21e3ff98b4aa87b8 Mon Sep 17 00:00:00 2001 From: Peter Kanev Date: Wed, 5 Apr 2017 17:27:45 +0300 Subject: [PATCH 1/3] implicitly install karma-'s peer dependencies on test init command --- lib/commands/test-init.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/commands/test-init.ts b/lib/commands/test-init.ts index 0593173dbc..c990d12eac 100644 --- a/lib/commands/test-init.ts +++ b/lib/commands/test-init.ts @@ -37,6 +37,18 @@ class TestInitCommand implements ICommand { 'save-dev': true, optional: false, }); + + let modulePath = path.join(projectDir, "node_modules", mod); + let modulePackageJsonPath = path.join(modulePath, "package.json"); + let modulePackageJsonContent = this.$fs.readJson(modulePackageJsonPath); + let modulePeerDependencies = modulePackageJsonContent.peerDependencies || {}; + + for (let peerDependency in modulePeerDependencies) { + let dependencyVersion = modulePeerDependencies[peerDependency] || "*"; + await this.$npm.install(`${peerDependency}@${dependencyVersion}`, projectDir, { + 'save-dev': true + }); + } } await this.$pluginsService.add('nativescript-unit-test-runner', this.$projectData); From 0e899092b33de007b9d645c9c7cc753386f80871 Mon Sep 17 00:00:00 2001 From: Peter Kanev Date: Thu, 6 Apr 2017 09:30:31 +0300 Subject: [PATCH 2/3] add exception handling when installing packages already present in the project --- lib/commands/test-init.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/commands/test-init.ts b/lib/commands/test-init.ts index c990d12eac..9e98a42218 100644 --- a/lib/commands/test-init.ts +++ b/lib/commands/test-init.ts @@ -38,16 +38,23 @@ class TestInitCommand implements ICommand { optional: false, }); - let modulePath = path.join(projectDir, "node_modules", mod); - let modulePackageJsonPath = path.join(modulePath, "package.json"); - let modulePackageJsonContent = this.$fs.readJson(modulePackageJsonPath); - let modulePeerDependencies = modulePackageJsonContent.peerDependencies || {}; + const modulePath = path.join(projectDir, "node_modules", mod); + const modulePackageJsonPath = path.join(modulePath, "package.json"); + const modulePackageJsonContent = this.$fs.readJson(modulePackageJsonPath); + const modulePeerDependencies = modulePackageJsonContent.peerDependencies || {}; for (let peerDependency in modulePeerDependencies) { let dependencyVersion = modulePeerDependencies[peerDependency] || "*"; - await this.$npm.install(`${peerDependency}@${dependencyVersion}`, projectDir, { - 'save-dev': true - }); + + // catch errors when a peerDependency is already installed + // e.g karma is installed; karma-jasmine depends on karma and will try to install it again + try { + await this.$npm.install(`${peerDependency}@${dependencyVersion}`, projectDir, { + 'save-dev': true + }); + } catch (e) { + this.$logger.info(e.message); + } } } From 55f98060a68c95a3a5426d8d442d7fcd1c061033 Mon Sep 17 00:00:00 2001 From: Peter Kanev Date: Mon, 10 Apr 2017 11:58:12 +0300 Subject: [PATCH 3/3] log warning instead of throwing errors when a package's name couldn't be determined when installed using the node-package-manager service --- lib/commands/test-init.ts | 2 +- lib/node-package-manager.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/commands/test-init.ts b/lib/commands/test-init.ts index 9e98a42218..69736ac8a7 100644 --- a/lib/commands/test-init.ts +++ b/lib/commands/test-init.ts @@ -53,7 +53,7 @@ class TestInitCommand implements ICommand { 'save-dev': true }); } catch (e) { - this.$logger.info(e.message); + this.$logger.error(e.message); } } } diff --git a/lib/node-package-manager.ts b/lib/node-package-manager.ts index fd863640b4..45591a8122 100644 --- a/lib/node-package-manager.ts +++ b/lib/node-package-manager.ts @@ -76,10 +76,10 @@ export class NodePackageManager implements INodePackageManager { let diff = dependencyDiff.concat(devDependencyDiff); if (diff.length <= 0 && dependenciesBefore.length === dependenciesAfter.length && packageName !== pathToSave) { - this.$errors.failWithoutHelp(`The plugin ${packageName} is already installed`); + this.$logger.warn(`The plugin ${packageName} is already installed`); } if (diff.length <= 0 && dependenciesBefore.length !== dependenciesAfter.length) { - this.$errors.failWithoutHelp(`Couldn't install package correctly`); + this.$logger.warn(`Couldn't install package ${packageName} correctly`); } return diff;