Skip to content

fix: remove all .ts files when building in release #4008

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions lib/definitions/platform.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -306,10 +306,15 @@ interface INodeModulesData extends IPlatform, IProjectDataComposition, IAppFiles
projectFilesConfig: IProjectFilesConfig;
}

interface INodeModulesBuilderData {
nodeModulesData: INodeModulesData;
release: boolean;
}

interface INodeModulesBuilder {
prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void>;
prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise<void>;
cleanNodeModules(absoluteOutputPath: string, platform: string): void;
prepareNodeModules(opts: INodeModulesBuilderData): Promise<void>;
prepareJSNodeModules(opts: INodeModulesBuilderData): Promise<void>;
cleanNodeModules(absoluteOutputPath: string): void;
}

interface INodeModulesDependenciesBuilder {
Expand Down Expand Up @@ -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;
}
Expand Down
15 changes: 9 additions & 6 deletions lib/services/prepare-platform-js-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion lib/services/prepare-platform-native-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
23 changes: 12 additions & 11 deletions lib/tools/node-modules/node-modules-builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,24 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
private $nodeModulesDependenciesBuilder: INodeModulesDependenciesBuilder
) { }

public async prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void> {
const productionDependencies = this.initialPrepareNodeModules(nodeModulesData);
public async prepareNodeModules(opts: INodeModulesBuilderData): Promise<void> {
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<void> {
const productionDependencies = this.initialPrepareNodeModules(jsNodeModulesData);
public async prepareJSNodeModules(opts: INodeModulesBuilderData): Promise<void> {
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)) {
Expand All @@ -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;
Expand Down
29 changes: 8 additions & 21 deletions lib/tools/node-modules/node-modules-dest-copy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we exclude .scss files here as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking the same, but it is not a common practice to publish packages with .scss ,while all plugins have .d.ts. We need a more generic way to handle this and let the user decides what to exclude.

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);

Expand All @@ -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);
Expand Down