Skip to content

Always clean platforms/app when --bundle is passed (#3269) #3270

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
Dec 13, 2017
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
6 changes: 3 additions & 3 deletions lib/definitions/platform.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,15 +271,15 @@ interface IAppFilesUpdaterOptionsComposition {
appFilesUpdaterOptions: IAppFilesUpdaterOptions;
}

interface IJsNodeModulesData extends IPlatform, IProjectDataComposition, IAppFilesUpdaterOptionsComposition {
interface INodeModulesData extends IPlatform, IProjectDataComposition, IAppFilesUpdaterOptionsComposition {
absoluteOutputPath: string;
lastModifiedTime: Date;
projectFilesConfig: IProjectFilesConfig;
}

interface INodeModulesBuilder {
prepareNodeModules(absoluteOutputPath: string, platform: string, lastModifiedTime: Date, projectData: IProjectData, projectFilesConfig: IProjectFilesConfig): Promise<void>;
prepareJSNodeModules(jsNodeModulesData: IJsNodeModulesData): Promise<void>;
prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void>;
prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise<void>;
cleanNodeModules(absoluteOutputPath: string, platform: string): void;
}

Expand Down
5 changes: 4 additions & 1 deletion lib/services/platform-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,10 @@ export class PlatformService extends EventEmitter implements IPlatformService {
const requiresNativePrepare = (!platformInfo.nativePrepare || !platformInfo.nativePrepare.skipNativePrepare) && changesInfo.nativePlatformStatus === constants.NativePlatformStatus.requiresPrepare;

if (changesInfo.hasChanges || platformInfo.appFilesUpdaterOptions.bundle || requiresNativePrepare) {
if (changesInfo.bundleChanged) {
// Always clear up the app directory in platforms if `--bundle` value has changed in between builds or is passed in general
// this is done as user has full control over what goes in platforms when `--bundle` is passed
// and we may end up with duplicate symbols which would fail the build
if (changesInfo.bundleChanged || platformInfo.appFilesUpdaterOptions.bundle) {
await this.cleanDestinationApp(platformInfo);
}

Expand Down
11 changes: 10 additions & 1 deletion lib/services/prepare-platform-native-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,17 @@ export class PreparePlatformNativeService extends PreparePlatformService impleme
const lastModifiedTime = this.$fs.exists(appDestinationDirectoryPath) ? this.$fs.getFsStats(appDestinationDirectoryPath).mtime : null;

const tnsModulesDestinationPath = path.join(appDestinationDirectoryPath, constants.TNS_MODULES_FOLDER_NAME);
const nodeModulesData: INodeModulesData = {
absoluteOutputPath: tnsModulesDestinationPath,
appFilesUpdaterOptions: config.appFilesUpdaterOptions,
lastModifiedTime,
platform: config.platform,
projectData: config.projectData,
projectFilesConfig: config.projectFilesConfig
};

// Process node_modules folder
await this.$nodeModulesBuilder.prepareNodeModules(tnsModulesDestinationPath, config.platform, lastModifiedTime, config.projectData, config.projectFilesConfig);
await this.$nodeModulesBuilder.prepareNodeModules(nodeModulesData);
}

if (!config.changesInfo || config.changesInfo.configChanged || config.changesInfo.modulesChanged) {
Expand Down
27 changes: 13 additions & 14 deletions lib/tools/node-modules/node-modules-builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,17 @@ import { TnsModulesCopy, NpmPluginPrepare } from "./node-modules-dest-copy";
export class NodeModulesBuilder implements INodeModulesBuilder {
constructor(private $fs: IFileSystem,
private $injector: IInjector,
private $options: IOptions,
private $nodeModulesDependenciesBuilder: INodeModulesDependenciesBuilder
) { }

public async prepareNodeModules(absoluteOutputPath: string, platform: string, lastModifiedTime: Date, projectData: IProjectData, projectFilesConfig: IProjectFilesConfig): Promise<void> {
const productionDependencies = this.initialPrepareNodeModules(absoluteOutputPath, platform, lastModifiedTime, projectData);
public async prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void> {
const productionDependencies = this.initialPrepareNodeModules(nodeModulesData);
const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare);
await npmPluginPrepare.preparePlugins(productionDependencies, platform, projectData, projectFilesConfig);
await npmPluginPrepare.preparePlugins(productionDependencies, nodeModulesData.platform, nodeModulesData.projectData, nodeModulesData.projectFilesConfig);
}

public async prepareJSNodeModules(jsNodeModulesData: IJsNodeModulesData): Promise<void> {
const productionDependencies = this.initialPrepareNodeModules(jsNodeModulesData.absoluteOutputPath, jsNodeModulesData.platform, jsNodeModulesData.lastModifiedTime, jsNodeModulesData.projectData);
public async prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise<void> {
const productionDependencies = this.initialPrepareNodeModules(jsNodeModulesData);
const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare);
await npmPluginPrepare.prepareJSPlugins(productionDependencies, jsNodeModulesData.platform, jsNodeModulesData.projectData, jsNodeModulesData.projectFilesConfig);
}
Expand All @@ -24,21 +23,21 @@ export class NodeModulesBuilder implements INodeModulesBuilder {
shelljs.rm("-rf", absoluteOutputPath);
}

private initialPrepareNodeModules(absoluteOutputPath: string, platform: string, lastModifiedTime: Date, projectData: IProjectData, ): IDependencyData[] {
const productionDependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies(projectData.projectDir);
private initialPrepareNodeModules(nodeModulesData: INodeModulesData): IDependencyData[] {
const productionDependencies = this.$nodeModulesDependenciesBuilder.getProductionDependencies(nodeModulesData.projectData.projectDir);

if (!this.$fs.exists(absoluteOutputPath)) {
if (!this.$fs.exists(nodeModulesData.absoluteOutputPath)) {
// Force copying if the destination doesn't exist.
lastModifiedTime = null;
nodeModulesData.lastModifiedTime = null;
}

if (!this.$options.bundle) {
if (!nodeModulesData.appFilesUpdaterOptions.bundle) {
const tnsModulesCopy = this.$injector.resolve(TnsModulesCopy, {
outputRoot: absoluteOutputPath
outputRoot: nodeModulesData.absoluteOutputPath
});
tnsModulesCopy.copyModules(productionDependencies, platform);
tnsModulesCopy.copyModules(productionDependencies, nodeModulesData.platform);
} else {
this.cleanNodeModules(absoluteOutputPath, platform);
this.cleanNodeModules(nodeModulesData.absoluteOutputPath, nodeModulesData.platform);
}

return productionDependencies;
Expand Down