Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.

Commit 574da39

Browse files
committed
fix(webpack): webpack in-memory output file system was breaking some plugins
1 parent dfcaefa commit 574da39

File tree

5 files changed

+37
-115
lines changed

5 files changed

+37
-115
lines changed

src/util/hybrid-file-system.ts

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,22 @@ export class HybridFileSystem implements FileSystem, VirtualFileSystem {
77

88
private filesStats: { [filePath: string]: VirtualFileStats } = {};
99
private directoryStats: { [filePath: string]: VirtualDirStats } = {};
10-
private originalFileSystem: FileSystem;
10+
private inputFileSystem: FileSystem;
11+
private outputFileSystem: FileSystem;
1112

1213
constructor(private fileCache: FileCache) {
1314
}
1415

15-
setFileSystem(fs: FileSystem) {
16-
this.originalFileSystem = fs;
16+
setInputFileSystem(fs: FileSystem) {
17+
this.inputFileSystem = fs;
18+
}
19+
20+
setOutputFileSystem(fs: FileSystem) {
21+
this.outputFileSystem = fs;
1722
}
1823

1924
isSync() {
20-
return this.originalFileSystem.isSync();
25+
return this.inputFileSystem.isSync();
2126
}
2227

2328
stat(path: string, callback: Function): any {
@@ -32,19 +37,19 @@ export class HybridFileSystem implements FileSystem, VirtualFileSystem {
3237
return callback(null, directoryStat);
3338
}
3439
// fallback to list
35-
return this.originalFileSystem.stat(path, callback);
40+
return this.inputFileSystem.stat(path, callback);
3641
}
3742

3843
readdir(path: string, callback: Function): any {
39-
return this.originalFileSystem.readdir(path, callback);
44+
return this.inputFileSystem.readdir(path, callback);
4045
}
4146

4247
readJson(path: string, callback: Function): any {
43-
return this.originalFileSystem.readJson(path, callback);
48+
return this.inputFileSystem.readJson(path, callback);
4449
}
4550

4651
readlink(path: string, callback: Function): any {
47-
return this.originalFileSystem.readlink(path, (err: Error, response: any) => {
52+
return this.inputFileSystem.readlink(path, (err: Error, response: any) => {
4853
callback(err, response);
4954
});
5055
}
@@ -63,7 +68,7 @@ export class HybridFileSystem implements FileSystem, VirtualFileSystem {
6368
callback(null, new Buffer(file.content));
6469
return;
6570
}
66-
return this.originalFileSystem.readFile(path, callback);
71+
return this.inputFileSystem.readFile(path, callback);
6772
}
6873

6974
addVirtualFile(filePath: string, fileContent: string) {
@@ -106,7 +111,19 @@ export class HybridFileSystem implements FileSystem, VirtualFileSystem {
106111
}
107112

108113
mkdirp(filePath: string, callback: Function) {
109-
callback();
114+
return this.outputFileSystem.mkdirp(filePath, callback);
115+
}
116+
117+
mkdir(filePath: string, callback: Function) {
118+
return this.outputFileSystem.mkdir(filePath, callback);
119+
}
120+
121+
rmdir(filePath: string, callback: Function) {
122+
return this.outputFileSystem.rmdir(filePath, callback);
123+
}
124+
125+
unlink(filePath: string, callback: Function) {
126+
return this.outputFileSystem.unlink(filePath, callback);
110127
}
111128

112129
join(dirPath: string, fileName: string) {
@@ -116,6 +133,6 @@ export class HybridFileSystem implements FileSystem, VirtualFileSystem {
116133
writeFile(filePath: string, fileContent: Buffer, callback: Function) {
117134
const stringContent = fileContent.toString();
118135
this.addVirtualFile(filePath, stringContent);
119-
callback();
136+
return this.outputFileSystem.writeFile(filePath, fileContent, callback);
120137
}
121138
}

src/util/interfaces.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ export interface FileSystem {
144144
readJson(path: string, callback: Function): any;
145145
readlink(path: string, callback: Function): any;
146146
purge(what: any): void;
147+
writeFile(filePath: string, fileContent: Buffer, callback: Function): void;
148+
mkdirp(filePath: string, callback: Function): void;
149+
mkdir(filePath: string, callback: Function): void;
150+
rmdir(filePath: string, callback: Function): void;
151+
unlink(filePath: string, callback: Function): void;
147152
}
148153

149154

src/webpack.spec.ts

Lines changed: 0 additions & 99 deletions
This file was deleted.

src/webpack.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,14 @@ function webpackBuildComplete(stats: any, context: BuildContext, webpackConfig:
9393
Logger.debug('Webpack Dependency Map End');
9494
}
9595

96-
return writeBundleFilesToDisk(context);
96+
return setBundledFiles(context);
9797
}
9898

99-
export function writeBundleFilesToDisk(context: BuildContext) {
99+
export function setBundledFiles(context: BuildContext) {
100100
const bundledFilesToWrite = context.fileCache.getAll().filter(file => {
101101
return dirname(file.path).indexOf(context.buildDir) >= 0 && (file.path.endsWith('.js') || file.path.endsWith('.js.map'));
102102
});
103103
context.bundledFilePaths = bundledFilesToWrite.map(bundledFile => bundledFile.path);
104-
const promises = bundledFilesToWrite.map(bundledFileToWrite => writeFileAsync(bundledFileToWrite.path, bundledFileToWrite.content));
105-
return Promise.all(promises);
106104
}
107105

108106
export function runWebpackFullBuild(config: WebpackConfig) {

src/webpack/ionic-environment-plugin.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export class IonicEnvironmentPlugin {
4949
compiler.plugin('environment', (otherCompiler: any, callback: Function) => {
5050
Logger.debug('[IonicEnvironmentPlugin] apply: creating environment plugin');
5151
const hybridFileSystem = getInstance();
52-
hybridFileSystem.setFileSystem(compiler.inputFileSystem);
52+
hybridFileSystem.setInputFileSystem(compiler.inputFileSystem);
53+
hybridFileSystem.setOutputFileSystem(compiler.outputFileSystem);
5354
compiler.inputFileSystem = hybridFileSystem;
5455
compiler.outputFileSystem = hybridFileSystem;
5556
compiler.watchFileSystem = new WatchMemorySystem(this.context.fileCache, this.context.srcDir);

0 commit comments

Comments
 (0)