diff --git a/lib/controllers/prepare-controller.ts b/lib/controllers/prepare-controller.ts index 258bb9c0bb..df3272136c 100644 --- a/lib/controllers/prepare-controller.ts +++ b/lib/controllers/prepare-controller.ts @@ -375,7 +375,7 @@ export class PrepareController extends EventEmitter { projectData: IProjectData ): Promise { const dependencies = this.$nodeModulesDependenciesBuilder - .getProductionDependencies(projectData.projectDir) + .getProductionDependencies(projectData.projectDir, projectData.ignoredDependencies) .filter((dep) => dep.nativescript); const pluginsNativeDirectories = dependencies.map((dep) => path.join( diff --git a/lib/definitions/platform.d.ts b/lib/definitions/platform.d.ts index f8a3800fe3..3940f99b74 100644 --- a/lib/definitions/platform.d.ts +++ b/lib/definitions/platform.d.ts @@ -78,7 +78,7 @@ interface IPrepareNodeModulesData { } interface INodeModulesDependenciesBuilder { - getProductionDependencies(projectPath: string): IDependencyData[]; + getProductionDependencies(projectPath: string, ignore?: string[]): IDependencyData[]; } interface IBuildInfo { diff --git a/lib/definitions/project.d.ts b/lib/definitions/project.d.ts index 4820ea7d0b..186d77734b 100644 --- a/lib/definitions/project.d.ts +++ b/lib/definitions/project.d.ts @@ -153,6 +153,7 @@ interface IProjectData extends ICreateProjectData { projectId: string; projectIdentifiers?: Mobile.IProjectIdentifier; dependencies: any; + ignoredDependencies?: string[]; devDependencies: IStringDictionary; appDirectoryPath: string; appResourcesDirectoryPath: string; diff --git a/lib/services/plugins-service.ts b/lib/services/plugins-service.ts index 8003aba5d1..6574adcda9 100644 --- a/lib/services/plugins-service.ts +++ b/lib/services/plugins-service.ts @@ -352,7 +352,7 @@ export class PluginsService implements IPluginsService { dependencies = dependencies || this.$nodeModulesDependenciesBuilder.getProductionDependencies( - projectData.projectDir + projectData.projectDir, projectData.ignoredDependencies ); if (_.isEmpty(dependencies)) { diff --git a/lib/services/project-changes-service.ts b/lib/services/project-changes-service.ts index ccdf97c9c7..91fcf3a054 100644 --- a/lib/services/project-changes-service.ts +++ b/lib/services/project-changes-service.ts @@ -93,7 +93,7 @@ export class ProjectChangesService implements IProjectChangesService { ); this.$nodeModulesDependenciesBuilder - .getProductionDependencies(projectData.projectDir) + .getProductionDependencies(projectData.projectDir, projectData.ignoredDependencies) .filter( (dep) => dep.nativescript && diff --git a/lib/tools/node-modules/node-modules-builder.ts b/lib/tools/node-modules/node-modules-builder.ts index a7be237636..6be5874213 100644 --- a/lib/tools/node-modules/node-modules-builder.ts +++ b/lib/tools/node-modules/node-modules-builder.ts @@ -19,7 +19,7 @@ export class NodeModulesBuilder implements INodeModulesBuilder { projectData, }: IPrepareNodeModulesData): Promise { const dependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies( - projectData.projectDir + projectData.projectDir, projectData.ignoredDependencies ); await platformData.platformProjectService.beforePrepareAllPlugins( projectData, diff --git a/lib/tools/node-modules/node-modules-dependencies-builder.ts b/lib/tools/node-modules/node-modules-dependencies-builder.ts index eef6818aaf..deeec46e31 100644 --- a/lib/tools/node-modules/node-modules-dependencies-builder.ts +++ b/lib/tools/node-modules/node-modules-dependencies-builder.ts @@ -20,7 +20,7 @@ export class NodeModulesDependenciesBuilder implements INodeModulesDependenciesBuilder { public constructor(private $fs: IFileSystem) {} - public getProductionDependencies(projectPath: string): IDependencyData[] { + public getProductionDependencies(projectPath: string, ignore?:string[]): IDependencyData[] { const rootNodeModulesPath = path.join( projectPath, NODE_MODULES_FOLDER_NAME @@ -83,7 +83,9 @@ export class NodeModulesDependenciesBuilder resolvedDependencies.push(resolvedDependency); } } - + if (ignore && ignore.length > 0) { + return resolvedDependencies.filter(d => ignore.indexOf(d.name) === -1); + } return resolvedDependencies; } diff --git a/test/tools/node-modules/node-modules-dependencies-builder.ts b/test/tools/node-modules/node-modules-dependencies-builder.ts index 1d0e69ed1c..596e052d88 100644 --- a/test/tools/node-modules/node-modules-dependencies-builder.ts +++ b/test/tools/node-modules/node-modules-dependencies-builder.ts @@ -790,6 +790,46 @@ describe("nodeModulesDependenciesBuilder", () => { assert.deepStrictEqual(actualResult, expectedResult); }); + + it("ignoring dependencies", async () => { + // The test validates the following dependency tree, when npm 3+ is used. + // + // ├── firstPackage@1.0.0 + // ├── secondPackage@1.1.0 + // └── thirdPackage@1.2.0 + + const rootDeps: IDependencyInfo[] = [ + generateDependency(firstPackage, "1.0.0", 0, null), + generateDependency(secondPackage, "1.1.0", 0, null), + generateDependency(thirdPackage, "1.2.0", 0, null), + ]; + + const nodeModulesDependenciesBuilder = generateTest(rootDeps); + const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies( + pathToProject, [firstPackage] + ); + + const expectedResult: IDependencyData[] = [ + getNodeModuleInfoForExpecteDependency( + secondPackage, + 0, + null, + null, + null, + "1.1.0" + ), + getNodeModuleInfoForExpecteDependency( + thirdPackage, + 0, + null, + null, + null, + "1.2.0" + ), + ]; + + assert.deepStrictEqual(actualResult, expectedResult); + }); }); }); });