From e0d3f5ed07a5861dee3d1755331fe2ce85378fc4 Mon Sep 17 00:00:00 2001 From: rosen-vladimirov Date: Wed, 10 Oct 2018 12:41:45 +0300 Subject: [PATCH] fix: remove all .ts files when building in release When building application in release mode, the `.ts` files of all plugins should be removed from the final application. Currently this is happening only for `tns-core-modules`. Do this for all the plugins. Remove logic that deletes the `node_modules` directory of the `tns-core-modules` when it is copied to `platforms`. This is not required anymore and it breaks use-case when linking tns-core-modules. --- lib/definitions/platform.d.ts | 13 ++++++--- lib/services/prepare-platform-js-service.ts | 15 ++++++---- .../prepare-platform-native-service.ts | 2 +- .../node-modules/node-modules-builder.ts | 23 ++++++++------- .../node-modules/node-modules-dest-copy.ts | 29 +++++-------------- 5 files changed, 39 insertions(+), 43 deletions(-) diff --git a/lib/definitions/platform.d.ts b/lib/definitions/platform.d.ts index c595163aab..6fbc586447 100644 --- a/lib/definitions/platform.d.ts +++ b/lib/definitions/platform.d.ts @@ -306,10 +306,15 @@ interface INodeModulesData extends IPlatform, IProjectDataComposition, IAppFiles projectFilesConfig: IProjectFilesConfig; } +interface INodeModulesBuilderData { + nodeModulesData: INodeModulesData; + release: boolean; +} + interface INodeModulesBuilder { - prepareNodeModules(nodeModulesData: INodeModulesData): Promise; - prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise; - cleanNodeModules(absoluteOutputPath: string, platform: string): void; + prepareNodeModules(opts: INodeModulesBuilderData): Promise; + prepareJSNodeModules(opts: INodeModulesBuilderData): Promise; + cleanNodeModules(absoluteOutputPath: string): void; } interface INodeModulesDependenciesBuilder { @@ -369,7 +374,7 @@ interface IOptionalFilesToRemove { filesToRemove?: string[]; } -interface IPreparePlatformInfoBase extends IPlatform, IAppFilesUpdaterOptionsComposition, IProjectDataComposition, IEnvOptions, IOptionalFilesToSync, IOptionalFilesToRemove, IOptionalNativePrepareComposition { +interface IPreparePlatformInfoBase extends IPlatform, IAppFilesUpdaterOptionsComposition, IProjectDataComposition, IEnvOptions, IOptionalFilesToSync, IOptionalFilesToRemove, IOptionalNativePrepareComposition { skipCopyTnsModules?: boolean; skipCopyAppResourcesFiles?: boolean; } diff --git a/lib/services/prepare-platform-js-service.ts b/lib/services/prepare-platform-js-service.ts index ba7bb98a87..c1cbeb5f8c 100644 --- a/lib/services/prepare-platform-js-service.ts +++ b/lib/services/prepare-platform-js-service.ts @@ -101,12 +101,15 @@ export class PreparePlatformJSService extends PreparePlatformService implements const absoluteOutputPath = path.join(appDestinationDirectoryPath, constants.TNS_MODULES_FOLDER_NAME); // Process node_modules folder await this.$nodeModulesBuilder.prepareJSNodeModules({ - absoluteOutputPath, - platform, - lastModifiedTime, - projectData, - appFilesUpdaterOptions, - projectFilesConfig + nodeModulesData: { + absoluteOutputPath, + platform, + lastModifiedTime, + projectData, + appFilesUpdaterOptions, + projectFilesConfig + }, + release: appFilesUpdaterOptions.release }); } catch (error) { this.$logger.debug(error); diff --git a/lib/services/prepare-platform-native-service.ts b/lib/services/prepare-platform-native-service.ts index 9eb81e2afe..1c788c9ff9 100644 --- a/lib/services/prepare-platform-native-service.ts +++ b/lib/services/prepare-platform-native-service.ts @@ -54,7 +54,7 @@ export class PreparePlatformNativeService extends PreparePlatformService impleme }; // Process node_modules folder - await this.$nodeModulesBuilder.prepareNodeModules(nodeModulesData); + await this.$nodeModulesBuilder.prepareNodeModules({ nodeModulesData, release: config.appFilesUpdaterOptions.release }); } if (!config.changesInfo || config.changesInfo.configChanged || config.changesInfo.modulesChanged) { diff --git a/lib/tools/node-modules/node-modules-builder.ts b/lib/tools/node-modules/node-modules-builder.ts index 924f8c4082..d0b3a21516 100644 --- a/lib/tools/node-modules/node-modules-builder.ts +++ b/lib/tools/node-modules/node-modules-builder.ts @@ -7,23 +7,24 @@ export class NodeModulesBuilder implements INodeModulesBuilder { private $nodeModulesDependenciesBuilder: INodeModulesDependenciesBuilder ) { } - public async prepareNodeModules(nodeModulesData: INodeModulesData): Promise { - const productionDependencies = this.initialPrepareNodeModules(nodeModulesData); + public async prepareNodeModules(opts: INodeModulesBuilderData): Promise { + const productionDependencies = this.initialPrepareNodeModules(opts); const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare); - await npmPluginPrepare.preparePlugins(productionDependencies, nodeModulesData.platform, nodeModulesData.projectData, nodeModulesData.projectFilesConfig); + await npmPluginPrepare.preparePlugins(productionDependencies, opts.nodeModulesData.platform, opts.nodeModulesData.projectData, opts.nodeModulesData.projectFilesConfig); } - public async prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise { - const productionDependencies = this.initialPrepareNodeModules(jsNodeModulesData); + public async prepareJSNodeModules(opts: INodeModulesBuilderData): Promise { + const productionDependencies = this.initialPrepareNodeModules(opts); const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare); - await npmPluginPrepare.prepareJSPlugins(productionDependencies, jsNodeModulesData.platform, jsNodeModulesData.projectData, jsNodeModulesData.projectFilesConfig); + await npmPluginPrepare.prepareJSPlugins(productionDependencies, opts.nodeModulesData.platform, opts.nodeModulesData.projectData, opts.nodeModulesData.projectFilesConfig); } - public cleanNodeModules(absoluteOutputPath: string, platform: string): void { + public cleanNodeModules(absoluteOutputPath: string): void { shelljs.rm("-rf", absoluteOutputPath); } - private initialPrepareNodeModules(nodeModulesData: INodeModulesData): IDependencyData[] { + private initialPrepareNodeModules(opts: INodeModulesBuilderData): IDependencyData[] { + const { nodeModulesData, release } = opts; const productionDependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies(nodeModulesData.projectData.projectDir); if (!this.$fs.exists(nodeModulesData.absoluteOutputPath)) { @@ -32,12 +33,12 @@ export class NodeModulesBuilder implements INodeModulesBuilder { } if (!nodeModulesData.appFilesUpdaterOptions.bundle) { - const tnsModulesCopy = this.$injector.resolve(TnsModulesCopy, { + const tnsModulesCopy: TnsModulesCopy = this.$injector.resolve(TnsModulesCopy, { outputRoot: nodeModulesData.absoluteOutputPath }); - tnsModulesCopy.copyModules(productionDependencies, nodeModulesData.platform); + tnsModulesCopy.copyModules({ dependencies: productionDependencies, release}); } else { - this.cleanNodeModules(nodeModulesData.absoluteOutputPath, nodeModulesData.platform); + this.cleanNodeModules(nodeModulesData.absoluteOutputPath); } return productionDependencies; diff --git a/lib/tools/node-modules/node-modules-dest-copy.ts b/lib/tools/node-modules/node-modules-dest-copy.ts index 7ec460bbbe..cbdfd51ae0 100644 --- a/lib/tools/node-modules/node-modules-dest-copy.ts +++ b/lib/tools/node-modules/node-modules-dest-copy.ts @@ -10,33 +10,21 @@ export interface ILocalDependencyData extends IDependencyData { export class TnsModulesCopy { constructor( private outputRoot: string, - private $options: IOptions, private $fs: IFileSystem, private $pluginsService: IPluginsService ) { } - public copyModules(dependencies: IDependencyData[], platform: string): void { - for (const entry in dependencies) { - const dependency = dependencies[entry]; + public copyModules(opts: { dependencies: IDependencyData[], release: boolean }): void { + const filePatternsToDelete = opts.release ? "**/*.ts" : "**/*.d.ts"; + for (const entry in opts.dependencies) { + const dependency = opts.dependencies[entry]; - this.copyDependencyDir(dependency); - - if (dependency.name === constants.TNS_CORE_MODULES_NAME) { - const tnsCoreModulesResourcePath = path.join(this.outputRoot, constants.TNS_CORE_MODULES_NAME); - - // Remove .ts files - const allFiles = this.$fs.enumerateFilesInDirectorySync(tnsCoreModulesResourcePath); - // TODO: Remove usage of $options here. - const matchPattern = this.$options.release ? "**/*.ts" : "**/*.d.ts"; - allFiles.filter(file => minimatch(file, matchPattern, { nocase: true })).map(file => this.$fs.deleteFile(file)); - - shelljs.rm("-rf", path.join(tnsCoreModulesResourcePath, constants.NODE_MODULES_FOLDER_NAME)); - } + this.copyDependencyDir(dependency, filePatternsToDelete); } } - private copyDependencyDir(dependency: IDependencyData): void { + private copyDependencyDir(dependency: IDependencyData, filePatternsToDelete: string): void { if (dependency.depth === 0) { const targetPackageDir = path.join(this.outputRoot, dependency.name); @@ -51,14 +39,13 @@ export class TnsModulesCopy { this.removeNonProductionDependencies(dependency, targetPackageDir); this.removeDependenciesPlatformsDirs(targetPackageDir); + const allFiles = this.$fs.enumerateFilesInDirectorySync(targetPackageDir); + allFiles.filter(file => minimatch(file, filePatternsToDelete, { nocase: true })).map(file => this.$fs.deleteFile(file)); } } private removeDependenciesPlatformsDirs(dependencyDir: string): void { const dependenciesFolder = path.join(dependencyDir, constants.NODE_MODULES_FOLDER_NAME); - if (!this.$fs.exists(dependenciesFolder)) { - return; - } if (this.$fs.exists(dependenciesFolder)) { const dependencies = this.getDependencies(dependenciesFolder);