Skip to content

Commit 199757e

Browse files
Mitko-Kerezovrosen-vladimirov
authored andcommitted
Always clean platforms/app when --bundle is passed (#3269)
* Always clean platforms/app when `--bundle` is passed * Do not use $options in $nodeModulesBuilder Whenever CLI is required as a library `$options` flags are not set. Hence `$options` should only be used where one knows CLI is truly run as a command-line interface - i.e. in commands.
1 parent d0ab68d commit 199757e

File tree

4 files changed

+30
-19
lines changed

4 files changed

+30
-19
lines changed

lib/definitions/platform.d.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -271,15 +271,15 @@ interface IAppFilesUpdaterOptionsComposition {
271271
appFilesUpdaterOptions: IAppFilesUpdaterOptions;
272272
}
273273

274-
interface IJsNodeModulesData extends IPlatform, IProjectDataComposition, IAppFilesUpdaterOptionsComposition {
274+
interface INodeModulesData extends IPlatform, IProjectDataComposition, IAppFilesUpdaterOptionsComposition {
275275
absoluteOutputPath: string;
276276
lastModifiedTime: Date;
277277
projectFilesConfig: IProjectFilesConfig;
278278
}
279279

280280
interface INodeModulesBuilder {
281-
prepareNodeModules(absoluteOutputPath: string, platform: string, lastModifiedTime: Date, projectData: IProjectData, projectFilesConfig: IProjectFilesConfig): Promise<void>;
282-
prepareJSNodeModules(jsNodeModulesData: IJsNodeModulesData): Promise<void>;
281+
prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void>;
282+
prepareJSNodeModules(jsNodeModulesData: INodeModulesData): Promise<void>;
283283
cleanNodeModules(absoluteOutputPath: string, platform: string): void;
284284
}
285285

lib/services/platform-service.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ export class PlatformService extends EventEmitter implements IPlatformService {
194194
const requiresNativePrepare = (!platformInfo.nativePrepare || !platformInfo.nativePrepare.skipNativePrepare) && changesInfo.nativePlatformStatus === constants.NativePlatformStatus.requiresPrepare;
195195

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

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

+10-1
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,17 @@ export class PreparePlatformNativeService extends PreparePlatformService impleme
3838
const lastModifiedTime = this.$fs.exists(appDestinationDirectoryPath) ? this.$fs.getFsStats(appDestinationDirectoryPath).mtime : null;
3939

4040
const tnsModulesDestinationPath = path.join(appDestinationDirectoryPath, constants.TNS_MODULES_FOLDER_NAME);
41+
const nodeModulesData: INodeModulesData = {
42+
absoluteOutputPath: tnsModulesDestinationPath,
43+
appFilesUpdaterOptions: config.appFilesUpdaterOptions,
44+
lastModifiedTime,
45+
platform: config.platform,
46+
projectData: config.projectData,
47+
projectFilesConfig: config.projectFilesConfig
48+
};
49+
4150
// Process node_modules folder
42-
await this.$nodeModulesBuilder.prepareNodeModules(tnsModulesDestinationPath, config.platform, lastModifiedTime, config.projectData, config.projectFilesConfig);
51+
await this.$nodeModulesBuilder.prepareNodeModules(nodeModulesData);
4352
}
4453

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

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

+13-14
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,17 @@ import { TnsModulesCopy, NpmPluginPrepare } from "./node-modules-dest-copy";
44
export class NodeModulesBuilder implements INodeModulesBuilder {
55
constructor(private $fs: IFileSystem,
66
private $injector: IInjector,
7-
private $options: IOptions,
87
private $nodeModulesDependenciesBuilder: INodeModulesDependenciesBuilder
98
) { }
109

11-
public async prepareNodeModules(absoluteOutputPath: string, platform: string, lastModifiedTime: Date, projectData: IProjectData, projectFilesConfig: IProjectFilesConfig): Promise<void> {
12-
const productionDependencies = this.initialPrepareNodeModules(absoluteOutputPath, platform, lastModifiedTime, projectData);
10+
public async prepareNodeModules(nodeModulesData: INodeModulesData): Promise<void> {
11+
const productionDependencies = this.initialPrepareNodeModules(nodeModulesData);
1312
const npmPluginPrepare: NpmPluginPrepare = this.$injector.resolve(NpmPluginPrepare);
14-
await npmPluginPrepare.preparePlugins(productionDependencies, platform, projectData, projectFilesConfig);
13+
await npmPluginPrepare.preparePlugins(productionDependencies, nodeModulesData.platform, nodeModulesData.projectData, nodeModulesData.projectFilesConfig);
1514
}
1615

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

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

30-
if (!this.$fs.exists(absoluteOutputPath)) {
29+
if (!this.$fs.exists(nodeModulesData.absoluteOutputPath)) {
3130
// Force copying if the destination doesn't exist.
32-
lastModifiedTime = null;
31+
nodeModulesData.lastModifiedTime = null;
3332
}
3433

35-
if (!this.$options.bundle) {
34+
if (!nodeModulesData.appFilesUpdaterOptions.bundle) {
3635
const tnsModulesCopy = this.$injector.resolve(TnsModulesCopy, {
37-
outputRoot: absoluteOutputPath
36+
outputRoot: nodeModulesData.absoluteOutputPath
3837
});
39-
tnsModulesCopy.copyModules(productionDependencies, platform);
38+
tnsModulesCopy.copyModules(productionDependencies, nodeModulesData.platform);
4039
} else {
41-
this.cleanNodeModules(absoluteOutputPath, platform);
40+
this.cleanNodeModules(nodeModulesData.absoluteOutputPath, nodeModulesData.platform);
4241
}
4342

4443
return productionDependencies;

0 commit comments

Comments
 (0)