Skip to content

Commit 2e60b34

Browse files
Merge pull request #4008 from NativeScript/vladimirov/link-tns-core-modules
fix: remove all .ts files when building in release
2 parents d3f99f5 + e0d3f5e commit 2e60b34

File tree

5 files changed

+39
-43
lines changed

5 files changed

+39
-43
lines changed

lib/definitions/platform.d.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -306,10 +306,15 @@ interface INodeModulesData extends IPlatform, IProjectDataComposition, IAppFiles
306306
projectFilesConfig: IProjectFilesConfig;
307307
}
308308

309+
interface INodeModulesBuilderData {
310+
nodeModulesData: INodeModulesData;
311+
release: boolean;
312+
}
313+
309314
interface INodeModulesBuilder {
310-
prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void>;
311-
prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise<void>;
312-
cleanNodeModules(absoluteOutputPath: string, platform: string): void;
315+
prepareNodeModules(opts: INodeModulesBuilderData): Promise<void>;
316+
prepareJSNodeModules(opts: INodeModulesBuilderData): Promise<void>;
317+
cleanNodeModules(absoluteOutputPath: string): void;
313318
}
314319

315320
interface INodeModulesDependenciesBuilder {
@@ -369,7 +374,7 @@ interface IOptionalFilesToRemove {
369374
filesToRemove?: string[];
370375
}
371376

372-
interface IPreparePlatformInfoBase extends IPlatform, IAppFilesUpdaterOptionsComposition, IProjectDataComposition, IEnvOptions, IOptionalFilesToSync, IOptionalFilesToRemove, IOptionalNativePrepareComposition {
377+
interface IPreparePlatformInfoBase extends IPlatform, IAppFilesUpdaterOptionsComposition, IProjectDataComposition, IEnvOptions, IOptionalFilesToSync, IOptionalFilesToRemove, IOptionalNativePrepareComposition {
373378
skipCopyTnsModules?: boolean;
374379
skipCopyAppResourcesFiles?: boolean;
375380
}

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

+9-6
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,15 @@ export class PreparePlatformJSService extends PreparePlatformService implements
101101
const absoluteOutputPath = path.join(appDestinationDirectoryPath, constants.TNS_MODULES_FOLDER_NAME);
102102
// Process node_modules folder
103103
await this.$nodeModulesBuilder.prepareJSNodeModules({
104-
absoluteOutputPath,
105-
platform,
106-
lastModifiedTime,
107-
projectData,
108-
appFilesUpdaterOptions,
109-
projectFilesConfig
104+
nodeModulesData: {
105+
absoluteOutputPath,
106+
platform,
107+
lastModifiedTime,
108+
projectData,
109+
appFilesUpdaterOptions,
110+
projectFilesConfig
111+
},
112+
release: appFilesUpdaterOptions.release
110113
});
111114
} catch (error) {
112115
this.$logger.debug(error);

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class PreparePlatformNativeService extends PreparePlatformService impleme
5454
};
5555

5656
// Process node_modules folder
57-
await this.$nodeModulesBuilder.prepareNodeModules(nodeModulesData);
57+
await this.$nodeModulesBuilder.prepareNodeModules({ nodeModulesData, release: config.appFilesUpdaterOptions.release });
5858
}
5959

6060
if (!config.changesInfo || config.changesInfo.configChanged || config.changesInfo.modulesChanged) {

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

+12-11
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,24 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
77
private $nodeModulesDependenciesBuilder: INodeModulesDependenciesBuilder
88
) { }
99

10-
public async prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void> {
11-
const productionDependencies = this.initialPrepareNodeModules(nodeModulesData);
10+
public async prepareNodeModules(opts: INodeModulesBuilderData): Promise<void> {
11+
const productionDependencies = this.initialPrepareNodeModules(opts);
1212
const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare);
13-
await npmPluginPrepare.preparePlugins(productionDependencies, nodeModulesData.platform, nodeModulesData.projectData, nodeModulesData.projectFilesConfig);
13+
await npmPluginPrepare.preparePlugins(productionDependencies, opts.nodeModulesData.platform, opts.nodeModulesData.projectData, opts.nodeModulesData.projectFilesConfig);
1414
}
1515

16-
public async prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise<void> {
17-
const productionDependencies = this.initialPrepareNodeModules(jsNodeModulesData);
16+
public async prepareJSNodeModules(opts: INodeModulesBuilderData): Promise<void> {
17+
const productionDependencies = this.initialPrepareNodeModules(opts);
1818
const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare);
19-
await npmPluginPrepare.prepareJSPlugins(productionDependencies, jsNodeModulesData.platform, jsNodeModulesData.projectData, jsNodeModulesData.projectFilesConfig);
19+
await npmPluginPrepare.prepareJSPlugins(productionDependencies, opts.nodeModulesData.platform, opts.nodeModulesData.projectData, opts.nodeModulesData.projectFilesConfig);
2020
}
2121

22-
public cleanNodeModules(absoluteOutputPath: string, platform: string): void {
22+
public cleanNodeModules(absoluteOutputPath: string): void {
2323
shelljs.rm("-rf", absoluteOutputPath);
2424
}
2525

26-
private initialPrepareNodeModules(nodeModulesData: INodeModulesData): IDependencyData[] {
26+
private initialPrepareNodeModules(opts: INodeModulesBuilderData): IDependencyData[] {
27+
const { nodeModulesData, release } = opts;
2728
const productionDependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies(nodeModulesData.projectData.projectDir);
2829

2930
if (!this.$fs.exists(nodeModulesData.absoluteOutputPath)) {
@@ -32,12 +33,12 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
3233
}
3334

3435
if (!nodeModulesData.appFilesUpdaterOptions.bundle) {
35-
const tnsModulesCopy = this.$injector.resolve(TnsModulesCopy, {
36+
const tnsModulesCopy: TnsModulesCopy = this.$injector.resolve(TnsModulesCopy, {
3637
outputRoot: nodeModulesData.absoluteOutputPath
3738
});
38-
tnsModulesCopy.copyModules(productionDependencies, nodeModulesData.platform);
39+
tnsModulesCopy.copyModules({ dependencies: productionDependencies, release});
3940
} else {
40-
this.cleanNodeModules(nodeModulesData.absoluteOutputPath, nodeModulesData.platform);
41+
this.cleanNodeModules(nodeModulesData.absoluteOutputPath);
4142
}
4243

4344
return productionDependencies;

lib/tools/node-modules/node-modules-dest-copy.ts

+8-21
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,21 @@ export interface ILocalDependencyData extends IDependencyData {
1010
export class TnsModulesCopy {
1111
constructor(
1212
private outputRoot: string,
13-
private $options: IOptions,
1413
private $fs: IFileSystem,
1514
private $pluginsService: IPluginsService
1615
) {
1716
}
1817

19-
public copyModules(dependencies: IDependencyData[], platform: string): void {
20-
for (const entry in dependencies) {
21-
const dependency = dependencies[entry];
18+
public copyModules(opts: { dependencies: IDependencyData[], release: boolean }): void {
19+
const filePatternsToDelete = opts.release ? "**/*.ts" : "**/*.d.ts";
20+
for (const entry in opts.dependencies) {
21+
const dependency = opts.dependencies[entry];
2222

23-
this.copyDependencyDir(dependency);
24-
25-
if (dependency.name === constants.TNS_CORE_MODULES_NAME) {
26-
const tnsCoreModulesResourcePath = path.join(this.outputRoot, constants.TNS_CORE_MODULES_NAME);
27-
28-
// Remove .ts files
29-
const allFiles = this.$fs.enumerateFilesInDirectorySync(tnsCoreModulesResourcePath);
30-
// TODO: Remove usage of $options here.
31-
const matchPattern = this.$options.release ? "**/*.ts" : "**/*.d.ts";
32-
allFiles.filter(file => minimatch(file, matchPattern, { nocase: true })).map(file => this.$fs.deleteFile(file));
33-
34-
shelljs.rm("-rf", path.join(tnsCoreModulesResourcePath, constants.NODE_MODULES_FOLDER_NAME));
35-
}
23+
this.copyDependencyDir(dependency, filePatternsToDelete);
3624
}
3725
}
3826

39-
private copyDependencyDir(dependency: IDependencyData): void {
27+
private copyDependencyDir(dependency: IDependencyData, filePatternsToDelete: string): void {
4028
if (dependency.depth === 0) {
4129
const targetPackageDir = path.join(this.outputRoot, dependency.name);
4230

@@ -51,14 +39,13 @@ export class TnsModulesCopy {
5139

5240
this.removeNonProductionDependencies(dependency, targetPackageDir);
5341
this.removeDependenciesPlatformsDirs(targetPackageDir);
42+
const allFiles = this.$fs.enumerateFilesInDirectorySync(targetPackageDir);
43+
allFiles.filter(file => minimatch(file, filePatternsToDelete, { nocase: true })).map(file => this.$fs.deleteFile(file));
5444
}
5545
}
5646

5747
private removeDependenciesPlatformsDirs(dependencyDir: string): void {
5848
const dependenciesFolder = path.join(dependencyDir, constants.NODE_MODULES_FOLDER_NAME);
59-
if (!this.$fs.exists(dependenciesFolder)) {
60-
return;
61-
}
6249

6350
if (this.$fs.exists(dependenciesFolder)) {
6451
const dependencies = this.getDependencies(dependenciesFolder);

0 commit comments

Comments
 (0)