Skip to content

Commit 6ba5cd6

Browse files
feat: ignoring native dependencies (#5524)
* feat: allow to ignore native dependencies Along with that we simply need to have a cli parameter and an option in nativescript.config * Update lib/definitions/project.d.ts Co-authored-by: Igor Randjelovic <[email protected]> * Update lib/controllers/prepare-controller.ts Co-authored-by: Igor Randjelovic <[email protected]> * Update lib/services/project-changes-service.ts Co-authored-by: Igor Randjelovic <[email protected]> * Update lib/services/plugins-service.ts Co-authored-by: Igor Randjelovic <[email protected]> * Update lib/tools/node-modules/node-modules-builder.ts Co-authored-by: Igor Randjelovic <[email protected]> Co-authored-by: Igor Randjelovic <[email protected]>
1 parent 90774db commit 6ba5cd6

File tree

8 files changed

+50
-7
lines changed

8 files changed

+50
-7
lines changed

lib/controllers/prepare-controller.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ export class PrepareController extends EventEmitter {
375375
projectData: IProjectData
376376
): Promise<string[]> {
377377
const dependencies = this.$nodeModulesDependenciesBuilder
378-
.getProductionDependencies(projectData.projectDir)
378+
.getProductionDependencies(projectData.projectDir, projectData.ignoredDependencies)
379379
.filter((dep) => dep.nativescript);
380380
const pluginsNativeDirectories = dependencies.map((dep) =>
381381
path.join(

lib/definitions/platform.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ interface IPrepareNodeModulesData {
7878
}
7979

8080
interface INodeModulesDependenciesBuilder {
81-
getProductionDependencies(projectPath: string): IDependencyData[];
81+
getProductionDependencies(projectPath: string, ignore?: string[]): IDependencyData[];
8282
}
8383

8484
interface IBuildInfo {

lib/definitions/project.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ interface IProjectData extends ICreateProjectData {
153153
projectId: string;
154154
projectIdentifiers?: Mobile.IProjectIdentifier;
155155
dependencies: any;
156+
ignoredDependencies?: string[];
156157
devDependencies: IStringDictionary;
157158
appDirectoryPath: string;
158159
appResourcesDirectoryPath: string;

lib/services/plugins-service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ export class PluginsService implements IPluginsService {
352352
dependencies =
353353
dependencies ||
354354
this.$nodeModulesDependenciesBuilder.getProductionDependencies(
355-
projectData.projectDir
355+
projectData.projectDir, projectData.ignoredDependencies
356356
);
357357

358358
if (_.isEmpty(dependencies)) {

lib/services/project-changes-service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export class ProjectChangesService implements IProjectChangesService {
9393
);
9494

9595
this.$nodeModulesDependenciesBuilder
96-
.getProductionDependencies(projectData.projectDir)
96+
.getProductionDependencies(projectData.projectDir, projectData.ignoredDependencies)
9797
.filter(
9898
(dep) =>
9999
dep.nativescript &&

lib/tools/node-modules/node-modules-builder.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
1919
projectData,
2020
}: IPrepareNodeModulesData): Promise<void> {
2121
const dependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies(
22-
projectData.projectDir
22+
projectData.projectDir, projectData.ignoredDependencies
2323
);
2424
await platformData.platformProjectService.beforePrepareAllPlugins(
2525
projectData,

lib/tools/node-modules/node-modules-dependencies-builder.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class NodeModulesDependenciesBuilder
2020
implements INodeModulesDependenciesBuilder {
2121
public constructor(private $fs: IFileSystem) {}
2222

23-
public getProductionDependencies(projectPath: string): IDependencyData[] {
23+
public getProductionDependencies(projectPath: string, ignore?:string[]): IDependencyData[] {
2424
const rootNodeModulesPath = path.join(
2525
projectPath,
2626
NODE_MODULES_FOLDER_NAME
@@ -83,7 +83,9 @@ export class NodeModulesDependenciesBuilder
8383
resolvedDependencies.push(resolvedDependency);
8484
}
8585
}
86-
86+
if (ignore && ignore.length > 0) {
87+
return resolvedDependencies.filter(d => ignore.indexOf(d.name) === -1);
88+
}
8789
return resolvedDependencies;
8890
}
8991

test/tools/node-modules/node-modules-dependencies-builder.ts

+40
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,46 @@ describe("nodeModulesDependenciesBuilder", () => {
790790

791791
assert.deepStrictEqual(actualResult, expectedResult);
792792
});
793+
794+
it("ignoring dependencies", async () => {
795+
// The test validates the following dependency tree, when npm 3+ is used.
796+
// <project dir>
797+
// ├── [email protected]
798+
// ├── [email protected]
799+
// └── [email protected]
800+
801+
const rootDeps: IDependencyInfo[] = [
802+
generateDependency(firstPackage, "1.0.0", 0, null),
803+
generateDependency(secondPackage, "1.1.0", 0, null),
804+
generateDependency(thirdPackage, "1.2.0", 0, null),
805+
];
806+
807+
const nodeModulesDependenciesBuilder = generateTest(rootDeps);
808+
const actualResult = await nodeModulesDependenciesBuilder.getProductionDependencies(
809+
pathToProject, [firstPackage]
810+
);
811+
812+
const expectedResult: IDependencyData[] = [
813+
getNodeModuleInfoForExpecteDependency(
814+
secondPackage,
815+
0,
816+
null,
817+
null,
818+
null,
819+
"1.1.0"
820+
),
821+
getNodeModuleInfoForExpecteDependency(
822+
thirdPackage,
823+
0,
824+
null,
825+
null,
826+
null,
827+
"1.2.0"
828+
),
829+
];
830+
831+
assert.deepStrictEqual(actualResult, expectedResult);
832+
});
793833
});
794834
});
795835
});

0 commit comments

Comments
 (0)