Skip to content

Commit 7f14263

Browse files
authored
Merge pull request #10 from mflor35/refactor/pkg-mgr-replace
refactor() - [Yarn Support - Part 2] - Replace npm with package manag…
2 parents 1364bec + 90d6e95 commit 7f14263

22 files changed

+100
-35
lines changed

lib/bootstrap.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,11 @@ $injector.require("itmsTransporterService", "./services/itmstransporter-service"
7979
$injector.requireCommand("setup|*", "./commands/setup");
8080
$injector.requireCommand(["setup|cloud", "cloud|setup"], "./commands/setup");
8181

82+
$injector.requirePublic("packageManager", "./package-manager");
8283
$injector.requirePublic("npm", "./node-package-manager");
84+
$injector.requirePublic("yarn", "./yarn-package-manager");
85+
$injector.requireCommand("package-manager|set", "./commands/package-manager-set");
86+
8387
$injector.require("npmInstallationManager", "./npm-installation-manager");
8488
$injector.require("dynamicHelpProvider", "./dynamic-help-provider");
8589
$injector.require("mobilePlatformsCapabilities", "./mobile-platforms-capabilities");

lib/commands/install.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export class InstallCommand implements ICommand {
1313
private $logger: ILogger,
1414
private $fs: IFileSystem,
1515
private $stringParameter: ICommandParameter,
16-
private $npm: INodePackageManager) {
16+
private $packageManager: INodePackageManager) {
1717
this.$projectData.initializeProjectData();
1818
}
1919

@@ -54,7 +54,7 @@ export class InstallCommand implements ICommand {
5454
moduleName = devPrefix + moduleName;
5555
}
5656

57-
await this.$npm.install(moduleName, projectDir, {
57+
await this.$packageManager.install(moduleName, projectDir, {
5858
'save-dev': true,
5959
disableNpmInstall: this.$options.disableNpmInstall,
6060
frameworkPath: this.$options.frameworkPath,

lib/commands/plugin/create-plugin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export class CreatePluginCommand implements ICommand {
1313
private $fs: IFileSystem,
1414
private $childProcess: IChildProcess,
1515
private $prompter: IPrompter,
16-
private $npm: INodePackageManager) { }
16+
private $packageManager: INodePackageManager) { }
1717

1818
public async execute(args: string[]): Promise<void> {
1919
const pluginRepoName = args[0];
@@ -45,7 +45,7 @@ export class CreatePluginCommand implements ICommand {
4545
try {
4646
spinner.start();
4747
const npmOptions: any = { silent: true };
48-
await this.$npm.install(cwd, cwd, npmOptions);
48+
await this.$packageManager.install(cwd, cwd, npmOptions);
4949
} finally {
5050
spinner.stop();
5151
}

lib/commands/test-init.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class TestInitCommand implements ICommand {
1212
mocha: ['chai']
1313
};
1414

15-
constructor(private $npm: INodePackageManager,
15+
constructor(private $packageManager: INodePackageManager,
1616
private $projectData: IProjectData,
1717
private $errors: IErrors,
1818
private $options: IOptions,
@@ -55,7 +55,7 @@ class TestInitCommand implements ICommand {
5555
if (mod.version) {
5656
moduleToInstall += `@${mod.version}`;
5757
}
58-
await this.$npm.install(moduleToInstall, projectDir, {
58+
await this.$packageManager.install(moduleToInstall, projectDir, {
5959
'save-dev': true,
6060
'save-exact': true,
6161
optional: false,
@@ -76,7 +76,7 @@ class TestInitCommand implements ICommand {
7676
// catch errors when a peerDependency is already installed
7777
// e.g karma is installed; karma-jasmine depends on karma and will try to install it again
7878
try {
79-
await this.$npm.install(`${peerDependency}@${dependencyVersion}`, projectDir, {
79+
await this.$packageManager.install(`${peerDependency}@${dependencyVersion}`, projectDir, {
8080
'save-dev': true,
8181
'save-exact': true,
8282
disableNpmInstall: false,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
export class PackageManagerCommand implements ICommand {
3+
4+
constructor(private $userSettingsService: IUserSettingsService,
5+
private $errors: IErrors,
6+
private $stringParameter: ICommandParameter) { }
7+
8+
public allowedParameters: ICommandParameter[] = [this.$stringParameter];
9+
10+
public execute(args: string[]): Promise<void> {
11+
if (args[0] === 'yarn' ) {
12+
return this.$userSettingsService.saveSetting("packageManager", "yarn");
13+
} else if ( args[0] === 'npm') {
14+
return this.$userSettingsService.saveSetting("packageManager", "npm");
15+
}
16+
return this.$errors.fail(`${args[0]} is not a valid package manager. Only yarn or npm are supported.`);
17+
}
18+
}
19+
20+
$injector.registerCommand("package-manager|set", PackageManagerCommand);

lib/services/android-plugin-build-service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
2222
private $hostInfo: IHostInfo,
2323
private $androidToolsInfo: IAndroidToolsInfo,
2424
private $logger: ILogger,
25-
private $npm: INodePackageManager,
25+
private $packageManager: INodePackageManager,
2626
private $projectDataService: IProjectDataService,
2727
private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants,
2828
private $errors: IErrors,
@@ -295,7 +295,7 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService {
295295
}
296296

297297
private async getRuntimeGradleVersions(projectDir: string): Promise<IRuntimeGradleVersions> {
298-
const registryData = await this.$npm.getRegistryPackageData(TNS_ANDROID_RUNTIME_NAME);
298+
const registryData = await this.$packageManager.getRegistryPackageData(TNS_ANDROID_RUNTIME_NAME);
299299
let runtimeGradleVersions: IRuntimeGradleVersions = null;
300300
if (projectDir) {
301301
const projectRuntimeVersion = this.$platformService.getCurrentPlatformVersion(

lib/services/android-project-service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
2727
private $injector: IInjector,
2828
private $pluginVariablesService: IPluginVariablesService,
2929
private $devicePlatformsConstants: Mobile.IDevicePlatformsConstants,
30-
private $npm: INodePackageManager,
30+
private $packageManager: INodePackageManager,
3131
private $androidPluginBuildService: IAndroidPluginBuildService,
3232
private $platformEnvironmentRequirements: IPlatformEnvironmentRequirements,
3333
private $androidResourcesMigrationService: IAndroidResourcesMigrationService,
@@ -206,7 +206,7 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
206206
(projectPackageJson.devDependencies && projectPackageJson.devDependencies[dependency.name]);
207207

208208
if (!dependencyVersionInProject) {
209-
await this.$npm.install(`${dependency.name}@${dependency.version}`, projectData.projectDir, npmConfig);
209+
await this.$packageManager.install(`${dependency.name}@${dependency.version}`, projectData.projectDir, npmConfig);
210210
} else {
211211
const cleanedVersion = semver.clean(dependencyVersionInProject);
212212

lib/services/init-service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class InitService implements IInitService {
2121
private $staticConfig: IStaticConfig,
2222
private $projectHelper: IProjectHelper,
2323
private $prompter: IPrompter,
24-
private $npm: INodePackageManager,
24+
private $packageManager: INodePackageManager,
2525
private $npmInstallationManager: INpmInstallationManager) { }
2626

2727
public async initialize(): Promise<void> {
@@ -106,7 +106,7 @@ export class InitService implements IInitService {
106106
return this.buildVersionData(latestVersion);
107107
}
108108

109-
const allVersions: any = await this.$npm.view(packageName, { "versions": true });
109+
const allVersions: any = await this.$packageManager.view(packageName, { "versions": true });
110110
const versions = _.filter(allVersions, (version: string) => semver.gte(version, InitService.MIN_SUPPORTED_FRAMEWORK_VERSIONS[packageName]));
111111
if (versions.length === 1) {
112112
this.$logger.info(`Only ${versions[0]} version is available for ${packageName}.`);

lib/services/plugins-service.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class PluginsService implements IPluginsService {
3131
}, PluginsService.NPM_CONFIG);
3232
}
3333

34-
constructor(private $npm: INodePackageManager,
34+
constructor(private $packageManager: INodePackageManager,
3535
private $fs: IFileSystem,
3636
private $options: IOptions,
3737
private $logger: ILogger,
@@ -46,7 +46,7 @@ export class PluginsService implements IPluginsService {
4646
plugin = possiblePackageName;
4747
}
4848

49-
const name = (await this.$npm.install(plugin, projectData.projectDir, this.npmInstallOptions)).name;
49+
const name = (await this.$packageManager.install(plugin, projectData.projectDir, this.npmInstallOptions)).name;
5050
const pathToRealNpmPackageJson = path.join(projectData.projectDir, "node_modules", name, "package.json");
5151
const realNpmPackageJson = this.$fs.readJson(pathToRealNpmPackageJson);
5252

@@ -65,14 +65,14 @@ export class PluginsService implements IPluginsService {
6565
} catch (err) {
6666
// Revert package.json
6767
this.$projectDataService.removeNSProperty(projectData.projectDir, this.$pluginVariablesService.getPluginVariablePropertyName(pluginData.name));
68-
await this.$npm.uninstall(plugin, PluginsService.NPM_CONFIG, projectData.projectDir);
68+
await this.$packageManager.uninstall(plugin, PluginsService.NPM_CONFIG, projectData.projectDir);
6969

7070
throw err;
7171
}
7272

7373
this.$logger.out(`Successfully installed plugin ${realNpmPackageJson.name}.`);
7474
} else {
75-
await this.$npm.uninstall(realNpmPackageJson.name, { save: true }, projectData.projectDir);
75+
await this.$packageManager.uninstall(realNpmPackageJson.name, { save: true }, projectData.projectDir);
7676
this.$errors.failWithoutHelp(`${plugin} is not a valid NativeScript plugin. Verify that the plugin package.json file contains a nativescript key and try again.`);
7777
}
7878
}
@@ -181,7 +181,7 @@ export class PluginsService implements IPluginsService {
181181
const notInstalledDependencies = _.difference(allDependencies, installedDependencies);
182182
if (this.$options.force || notInstalledDependencies.length) {
183183
this.$logger.trace("Npm install will be called from CLI. Force option is: ", this.$options.force, " Not installed dependencies are: ", notInstalledDependencies);
184-
await this.$npm.install(projectData.projectDir, projectData.projectDir, {
184+
await this.$packageManager.install(projectData.projectDir, projectData.projectDir, {
185185
disableNpmInstall: this.$options.disableNpmInstall,
186186
frameworkPath: this.$options.frameworkPath,
187187
ignoreScripts: this.$options.ignoreScripts,
@@ -282,9 +282,9 @@ export class PluginsService implements IPluginsService {
282282

283283
private async executeNpmCommand(npmCommandName: string, npmCommandArguments: string, projectData: IProjectData): Promise<string> {
284284
if (npmCommandName === PluginsService.INSTALL_COMMAND_NAME) {
285-
await this.$npm.install(npmCommandArguments, projectData.projectDir, this.npmInstallOptions);
285+
await this.$packageManager.install(npmCommandArguments, projectData.projectDir, this.npmInstallOptions);
286286
} else if (npmCommandName === PluginsService.UNINSTALL_COMMAND_NAME) {
287-
await this.$npm.uninstall(npmCommandArguments, PluginsService.NPM_CONFIG, projectData.projectDir);
287+
await this.$packageManager.uninstall(npmCommandArguments, PluginsService.NPM_CONFIG, projectData.projectDir);
288288
}
289289

290290
return this.parseNpmCommandResult(npmCommandArguments);

lib/services/prepare-platform-js-service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class PreparePlatformJSService extends PreparePlatformService implements
1616
private $logger: ILogger,
1717
private $projectDataService: IProjectDataService,
1818
private $nodeModulesBuilder: INodeModulesBuilder,
19-
private $npm: INodePackageManager) {
19+
private $packageManager: INodePackageManager) {
2020
super($fs, $hooksService, $xmlValidator);
2121
}
2222

@@ -77,7 +77,7 @@ export class PreparePlatformJSService extends PreparePlatformService implements
7777
const tempDir = temp.mkdirSync("platform-template");
7878
this.$fs.writeJson(path.join(tempDir, constants.PACKAGE_JSON_FILE_NAME), {});
7979
try {
80-
const npmInstallResult = await this.$npm.install(selectedTemplate, tempDir, {
80+
const npmInstallResult = await this.$packageManager.install(selectedTemplate, tempDir, {
8181
disableNpmInstall: false,
8282
frameworkPath: null,
8383
ignoreScripts: false

0 commit comments

Comments
 (0)