Merge pull request #6128 from webpack/bugfix/wasm-esm-and-exports

WASM bugfixes/improvements (fix weird extra default)
This commit is contained in:
Tobias Koppers 2017-12-14 13:52:46 +01:00 committed by GitHub
commit 8bc82da2ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 168 additions and 150 deletions

View File

@ -186,7 +186,7 @@ export function fibonacciJavascript(i) {
/******/
/******/ // a Promise means "currently loading" or "already loaded".
/******/ promises.push(installedWasmModuleData ||
/******/ (installedWasmModules[wasmModuleId] = fetch(__webpack_require__.p + "" + {"1":"27bb124d07adac2541fe","3":"0e736bedbc15ed9c8e33","4":"435e0d0a43195d073ec9"}[wasmModuleId] + ".wasm").then(function(response) {
/******/ (installedWasmModules[wasmModuleId] = fetch(__webpack_require__.p + "" + {"1":"77ca5181080bbc4c2f55","3":"b6b19efd9d04360b0a8d","4":"61f7b7b231ff2e0b5d25"}[wasmModuleId] + ".wasm").then(function(response) {
/******/ if(WebAssembly.compileStreaming) {
/******/ return WebAssembly.compileStreaming(response);
/******/ } else {
@ -264,7 +264,7 @@ export function fibonacciJavascript(i) {
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__.e/* import() */(1).then(function() { var module = __webpack_require__(/*! ./add.wasm */1); return typeof module === "object" && module && module.__esModule ? module : /* fake namespace object */ { "default": module }; }).then(addModule => {
__webpack_require__.e/* import() */(1).then(__webpack_require__.bind(null, /*! ./add.wasm */1)).then(addModule => {
console.log(addModule.add(22, 2200));
__webpack_require__.e/* import() */(0).then(__webpack_require__.bind(null, /*! ./math */2)).then(math => {
console.log(math.add(10, 101));
@ -305,7 +305,7 @@ function timed(name, fn) {
/*!******************!*\
!*** ./add.wasm ***!
\******************/
/*! no static exports found */
/*! exports provided: add */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@ -329,15 +329,12 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "factorialJavascript", function() { return factorialJavascript; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fibonacciJavascript", function() { return fibonacciJavascript; });
/* harmony import */ var _add_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add.wasm */1);
/* harmony import */ var _add_wasm__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_add_wasm__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "add", function() { return _add_wasm__WEBPACK_IMPORTED_MODULE_0__["add"]; });
/* harmony import */ var _factorial_wasm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./factorial.wasm */3);
/* harmony import */ var _factorial_wasm__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_factorial_wasm__WEBPACK_IMPORTED_MODULE_1__);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "factorial", function() { return _factorial_wasm__WEBPACK_IMPORTED_MODULE_1__["factorial"]; });
/* harmony import */ var _fibonacci_wasm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fibonacci.wasm */4);
/* harmony import */ var _fibonacci_wasm__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_fibonacci_wasm__WEBPACK_IMPORTED_MODULE_2__);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fibonacci", function() { return _fibonacci_wasm__WEBPACK_IMPORTED_MODULE_2__["fibonacci"]; });
@ -362,7 +359,7 @@ function fibonacciJavascript(i) {
/*!************************!*\
!*** ./factorial.wasm ***!
\************************/
/*! no static exports found */
/*! exports provided: factorial */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@ -378,7 +375,7 @@ module.exports = instance.exports;
/*!************************!*\
!*** ./fibonacci.wasm ***!
\************************/
/*! no static exports found */
/*! exports provided: fibonacci */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@ -402,7 +399,7 @@ module.exports = instance.exports;
/*!******************!*\
!*** ./add.wasm ***!
\******************/
/*! no static exports found */
/*! exports provided: add */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@ -425,16 +422,17 @@ module.exports = instance.exports;
Hash: 0a1b2c3d4e5f6a7b8c9d
Version: webpack next
Asset Size Chunks Chunk Names
0.output.js 3.33 KiB 0 [emitted]
27bb124d07adac2541fe.wasm 41 bytes 0, 1 [emitted]
0e736bedbc15ed9c8e33.wasm 62 bytes 0 [emitted]
435e0d0a43195d073ec9.wasm 67 bytes 0 [emitted]
1.output.js 462 bytes 1 [emitted]
output.js 9 KiB 2 [emitted] main
0.output.js 2.87 KiB 0 [emitted]
77ca5181080bbc4c2f55.wasm 41 bytes 0, 1 [emitted]
b6b19efd9d04360b0a8d.wasm 62 bytes 0 [emitted]
61f7b7b231ff2e0b5d25.wasm 67 bytes 0 [emitted]
1.output.js 460 bytes 1 [emitted]
output.js 8.86 KiB 2 [emitted] main
Entrypoint main = output.js
chunk {0} 0.output.js, 27bb124d07adac2541fe.wasm, 0e736bedbc15ed9c8e33.wasm, 435e0d0a43195d073ec9.wasm 585 bytes {2} [rendered]
chunk {0} 0.output.js, 77ca5181080bbc4c2f55.wasm, b6b19efd9d04360b0a8d.wasm, 61f7b7b231ff2e0b5d25.wasm 585 bytes {2} [rendered]
> [0] ./example.js 3:1-17
[1] ./add.wasm 41 bytes {0} {1} [built]
[exports: add]
import() ./add.wasm [0] ./example.js 1:0-20
harmony side effect evaluation ./add.wasm [2] ./math.js 1:0-33
harmony export imported specifier ./add.wasm [2] ./math.js 5:0-37
@ -442,14 +440,17 @@ chunk {0} 0.output.js, 27bb124d07adac2541fe.wasm, 0e736bedbc15ed9c8e33.wasm,
[exports: add, factorial, fibonacci, factorialJavascript, fibonacciJavascript]
import() ./math [0] ./example.js 3:1-17
[3] ./factorial.wasm 62 bytes {0} [built]
[exports: factorial]
harmony side effect evaluation ./factorial.wasm [2] ./math.js 2:0-45
harmony export imported specifier ./factorial.wasm [2] ./math.js 5:0-37
[4] ./fibonacci.wasm 67 bytes {0} [built]
[exports: fibonacci]
harmony side effect evaluation ./fibonacci.wasm [2] ./math.js 3:0-45
harmony export imported specifier ./fibonacci.wasm [2] ./math.js 5:0-37
chunk {1} 1.output.js, 27bb124d07adac2541fe.wasm 41 bytes {2} [rendered]
chunk {1} 1.output.js, 77ca5181080bbc4c2f55.wasm 41 bytes {2} [rendered]
> [0] ./example.js 1:0-20
[1] ./add.wasm 41 bytes {0} {1} [built]
[exports: add]
import() ./add.wasm [0] ./example.js 1:0-20
harmony side effect evaluation ./add.wasm [2] ./math.js 1:0-33
harmony export imported specifier ./add.wasm [2] ./math.js 5:0-37
@ -465,16 +466,17 @@ chunk {2} output.js (main) 788 bytes [entry] [rendered]
Hash: 0a1b2c3d4e5f6a7b8c9d
Version: webpack next
Asset Size Chunks Chunk Names
0.output.js 730 bytes 0, 1 [emitted]
ca9c9d58a020ad464842.wasm 41 bytes 0, 1, 1 [emitted]
64fb1a95d49da0773219.wasm 62 bytes 0, 1 [emitted]
bc9b931dad77c0bbc6cc.wasm 67 bytes 0, 1 [emitted]
0.output.js 722 bytes 0, 1 [emitted]
a1752e23bae9d6697e19.wasm 41 bytes 0, 1, 1 [emitted]
0b5fb42103459586a7f7.wasm 62 bytes 0, 1 [emitted]
48b4a645ac3841813d4e.wasm 67 bytes 0, 1 [emitted]
1.output.js 155 bytes 1 [emitted]
output.js 2.58 KiB 2 [emitted] main
output.js 2.52 KiB 2 [emitted] main
Entrypoint main = output.js
chunk {0} 0.output.js, ca9c9d58a020ad464842.wasm, 64fb1a95d49da0773219.wasm, bc9b931dad77c0bbc6cc.wasm 585 bytes {2} [rendered]
chunk {0} 0.output.js, a1752e23bae9d6697e19.wasm, 0b5fb42103459586a7f7.wasm, 48b4a645ac3841813d4e.wasm 585 bytes {2} [rendered]
> [0] ./example.js 3:1-17
[1] ./add.wasm 41 bytes {0} {1} [built]
[exports: add]
import() ./add.wasm [0] ./example.js 1:0-20
harmony side effect evaluation ./add.wasm [2] ./math.js 1:0-33
harmony export imported specifier ./add.wasm [2] ./math.js 5:0-37
@ -482,16 +484,19 @@ chunk {0} 0.output.js, ca9c9d58a020ad464842.wasm, 64fb1a95d49da0773219.wasm,
[exports: add, factorial, fibonacci, factorialJavascript, fibonacciJavascript]
import() ./math [0] ./example.js 3:1-17
[3] ./factorial.wasm 62 bytes {0} [built]
[exports: factorial]
[only some exports used: factorial]
harmony side effect evaluation ./factorial.wasm [2] ./math.js 2:0-45
harmony export imported specifier ./factorial.wasm [2] ./math.js 5:0-37
[4] ./fibonacci.wasm 67 bytes {0} [built]
[exports: fibonacci]
[only some exports used: fibonacci]
harmony side effect evaluation ./fibonacci.wasm [2] ./math.js 3:0-45
harmony export imported specifier ./fibonacci.wasm [2] ./math.js 5:0-37
chunk {1} 1.output.js, ca9c9d58a020ad464842.wasm 41 bytes {2} [rendered]
chunk {1} 1.output.js, a1752e23bae9d6697e19.wasm 41 bytes {2} [rendered]
> [0] ./example.js 1:0-20
[1] ./add.wasm 41 bytes {0} {1} [built]
[exports: add]
import() ./add.wasm [0] ./example.js 1:0-20
harmony side effect evaluation ./add.wasm [2] ./math.js 1:0-33
harmony export imported specifier ./add.wasm [2] ./math.js 5:0-37

View File

@ -313,22 +313,38 @@ class NormalModule extends Module {
return callback();
}
try {
this.parser.parse(this._ast || this._source.source(), {
current: this,
module: this,
compilation: compilation,
options: options
});
} catch(e) {
const handleParseError = e => {
const source = this._source.source();
const error = new ModuleParseError(this, source, e);
this.markModuleAsErrored(error);
return callback();
}
};
this._lastSuccessfulBuildMeta = this.buildMeta;
return callback();
const handleParseResult = result => {
this._lastSuccessfulBuildMeta = this.buildMeta;
return callback();
};
try {
const result = this.parser.parse(this._ast || this._source.source(), {
current: this,
module: this,
compilation: compilation,
options: options
}, (err, result) => {
if(err) {
handleParseError(err);
} else {
handleParseResult(result);
}
});
if(result !== undefined) {
// parse is sync
handleParseResult(result);
}
} catch(e) {
handleParseError(e);
}
});
}

View File

@ -2,6 +2,7 @@
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
/* globals WebAssembly */
"use strict";
// Syntax: https://developer.mozilla.org/en/SpiderMonkey/Parser_API
@ -15,11 +16,24 @@ class WebAssemblyParser extends Tapable {
this.options = options;
}
parse(source, initialState) {
// Does nothing current
parse(source, state, callback) {
// TODO parse WASM AST and walk it
// extract exports, imports
return initialState;
// TODO extract imports
// flag it as ESM
state.module.buildMeta.harmonyModule = true;
// extract exports
// TODO find more efficient way doing it
// TODO use Promises
if(typeof WebAssembly !== "undefined") {
WebAssembly.compile(source).then(module => {
state.module.buildMeta.providedExports = WebAssembly.Module.exports(module).map(exp => exp.name);
}).then(() => callback(null, state), err => callback(err));
} else {
state.module.buildMeta.providedExports = false;
callback(null, state);
}
}
}

View File

@ -5,13 +5,13 @@
"use strict";
const ReadFileCompileWasmMainTemplatePlugin = require("./ReadFileCompileWasmMainTemplatePlugin");
const ReadFileCompileWasmModuleTemplatePlugin = require("./ReadFileCompileWasmModuleTemplatePlugin");
const WasmModuleTemplatePlugin = require("../wasm/WasmModuleTemplatePlugin");
class ReadFileCompileWasmTemplatePlugin {
apply(compiler) {
compiler.hooks.thisCompilation.tap("ReadFileCompileWasmTemplatePlugin", (compilation) => {
compilation.mainTemplate.apply(new ReadFileCompileWasmMainTemplatePlugin());
compilation.moduleTemplates.javascript.apply(new ReadFileCompileWasmModuleTemplatePlugin());
compilation.moduleTemplates.javascript.apply(new WasmModuleTemplatePlugin());
});
}
}

View File

@ -6,7 +6,7 @@
const RawSource = require("webpack-sources").RawSource;
class ReadFileCompileWasmModuleTemplatePlugin {
class WasmModuleTemplatePlugin {
apply(moduleTemplate) {
moduleTemplate.plugin("content", (moduleSource, module, {
chunk
@ -14,6 +14,22 @@ class ReadFileCompileWasmModuleTemplatePlugin {
if(module.type && module.type.startsWith("webassembly")) {
if(chunk.isInitial())
throw new Error("Sync WebAsssmbly compilation is not yet implemented");
const generateExports = () => {
if(Array.isArray(module.buildMeta.providedExports) && Array.isArray(module.usedExports)) {
// generate mangled exports
return module.buildMeta.providedExports.map(exp => {
const usedName = module.isUsed(exp);
if(usedName) {
return `${module.exportsArgument}[${JSON.stringify(usedName)}] = instance.exports[${JSON.stringify(exp)}];`;
} else {
return `// unused ${JSON.stringify(exp)} export`;
}
}).join("\n");
} else {
// generate simple export
return `${module.moduleArgument}.exports = instance.exports;`;
}
};
const source = new RawSource([
"\"use strict\";",
"",
@ -22,7 +38,7 @@ class ReadFileCompileWasmModuleTemplatePlugin {
"",
"// export exports from WebAssmbly module",
// TODO rewrite this to getters depending on exports to support circular dependencies
"module.exports = instance.exports;"
generateExports()
].join("\n"));
return source;
} else {
@ -31,9 +47,9 @@ class ReadFileCompileWasmModuleTemplatePlugin {
});
moduleTemplate.plugin("hash", hash => {
hash.update("ReadFileCompileWasmModuleTemplatePlugin");
hash.update("WasmModuleTemplatePlugin");
hash.update("1");
});
}
}
module.exports = ReadFileCompileWasmModuleTemplatePlugin;
module.exports = WasmModuleTemplatePlugin;

View File

@ -1,39 +0,0 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const RawSource = require("webpack-sources").RawSource;
class FetchCompileWasmModuleTemplatePlugin {
apply(moduleTemplate) {
moduleTemplate.plugin("content", (moduleSource, module, {
chunk
}) => {
if(module.type && module.type.startsWith("webassembly")) {
if(chunk.isInitial())
throw new Error("Sync WebAsssmbly compilation is not yet implemented");
const source = new RawSource([
"\"use strict\";",
"",
"// Instanciate WebAssembly module",
"var instance = new WebAssembly.Instance(__webpack_require__.w[module.i], {});",
"",
"// export exports from WebAssmbly module",
// TODO rewrite this to getters depending on exports to support circular dependencies
"module.exports = instance.exports;"
].join("\n"));
return source;
} else {
return moduleSource;
}
});
moduleTemplate.plugin("hash", hash => {
hash.update("FetchCompileWasmModuleTemplatePlugin");
hash.update("1");
});
}
}
module.exports = FetchCompileWasmModuleTemplatePlugin;

View File

@ -5,13 +5,13 @@
"use strict";
const FetchCompileWasmMainTemplatePlugin = require("./FetchCompileWasmMainTemplatePlugin");
const FetchCompileWasmModuleTemplatePlugin = require("./FetchCompileWasmModuleTemplatePlugin");
const WasmModuleTemplatePlugin = require("../wasm/WasmModuleTemplatePlugin");
class FetchCompileWasmTemplatePlugin {
apply(compiler) {
compiler.hooks.thisCompilation.tap("FetchCompileWasmTemplatePlugin", (compilation) => {
compilation.mainTemplate.apply(new FetchCompileWasmMainTemplatePlugin());
compilation.moduleTemplates.javascript.apply(new FetchCompileWasmModuleTemplatePlugin());
compilation.moduleTemplates.javascript.apply(new WasmModuleTemplatePlugin());
});
}
}

View File

@ -1,7 +1,13 @@
it("should allow to run a WebAssembly module", function(done) {
import("./module").then(function(module) {
it("should allow to run a WebAssembly module (indirect)", function() {
return import("./module").then(function(module) {
const result = module.run();
result.should.be.eql(42);
done();
});
});
it("should allow to run a WebAssembly module (direct)", function() {
return import("./wasm.wasm?2").then(function(wasm) {
const result = wasm.add(wasm.getNumber(), 2);
result.should.be.eql(42);
});
});

View File

@ -1,4 +1,4 @@
import { add, getNumber } from "./wasm.wasm";
import { add, getNumber } from "./wasm.wasm?1";
export function run() {
return add(getNumber(), 2);

View File

@ -1,6 +1,6 @@
Hash: 944f966a4eb0dca2f58a944f966a4eb0dca2f58a
Hash: a1332ffdc8f016e06e2da1332ffdc8f016e06e2d
Child fitting:
Hash: 944f966a4eb0dca2f58a
Hash: a1332ffdc8f016e06e2d
Time: Xms
Asset Size Chunks Chunk Names
8687608dde0469fd3fba.js 2.23 KiB 0 [emitted]
@ -25,7 +25,7 @@ Child fitting:
> aggressive-splitted main [4] ./index.js
[3] ./e.js 899 bytes {6} [built]
Child content-change:
Hash: 944f966a4eb0dca2f58a
Hash: a1332ffdc8f016e06e2d
Time: Xms
Asset Size Chunks Chunk Names
8687608dde0469fd3fba.js 2.23 KiB 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 1ebefd12bbb8287a92b5
Hash: 3905d68515b61aa1238c
Time: Xms
Asset Size Chunks Chunk Names
678a72d82e420b28b031.js 1.96 KiB 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 3ce0bfad95632a1a689e
Hash: 8f74408892465f3dc6d5
Time: Xms
Asset Size Chunks Chunk Names
0.bundle.js 528 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: cfe0b4cca77f5362a0f6
Hash: cbb94bfd28c61629de06
Time: Xms
Asset Size Chunks Chunk Names
0.bundle.js 288 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 0be92f7ab7df0ba4d10a
Hash: 8f6f87bae4f020e96522
Time: Xms
Asset Size Chunks Chunk Names
main.js 2.6 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: <CLR=BOLD>0be92f7ab7df0ba4d10a</CLR>
Hash: <CLR=BOLD>8f6f87bae4f020e96522</CLR>
Time: <CLR=BOLD>X</CLR>ms
<CLR=BOLD>Asset</CLR> <CLR=BOLD>Size</CLR> <CLR=BOLD>Chunks</CLR> <CLR=39,BOLD><CLR=22> <CLR=39,BOLD><CLR=22><CLR=BOLD>Chunk Names</CLR>
<CLR=32>main.js</CLR> 2.6 KiB <CLR=BOLD>0</CLR> <CLR=32>[emitted]</CLR> main

View File

@ -1,4 +1,4 @@
Hash: <CLR=BOLD>0be92f7ab7df0ba4d10a</CLR>
Hash: <CLR=BOLD>8f6f87bae4f020e96522</CLR>
Time: <CLR=BOLD>X</CLR>ms
<CLR=BOLD>Asset</CLR> <CLR=BOLD>Size</CLR> <CLR=BOLD>Chunks</CLR> <CLR=39,BOLD><CLR=22> <CLR=39,BOLD><CLR=22><CLR=BOLD>Chunk Names</CLR>
<CLR=32,BOLD>main.js</CLR> 2.6 KiB <CLR=BOLD>0</CLR> <CLR=32,BOLD>[emitted]</CLR> main

View File

@ -1,4 +1,4 @@
Hash: 00a1e5057df2f775fb76
Hash: 36b0cc1896bc075e9b15
Time: Xms
Asset Size Chunks Chunk Names
entry-1.js 81 bytes 0 [emitted] entry-1

View File

@ -1,4 +1,4 @@
Hash: 37bc305daae8681aa9d0
Hash: 9c21c5852f540cdeffb9
Time: Xms
Asset Size Chunks Chunk Names
entry-1.js 3.22 KiB 0 [emitted] entry-1

View File

@ -1,6 +1,6 @@
Hash: e6af0e572727ae2b753cbb2d69615a180135bcde
Hash: a6418d72fd6bad27d7e001bd4246a474bfd828f8
Child
Hash: e6af0e572727ae2b753c
Hash: a6418d72fd6bad27d7e0
Time: Xms
Asset Size Chunks Chunk Names
app.js 656 bytes 0 [emitted] app
@ -9,7 +9,7 @@ Child
[./constants.js] 87 bytes {1} [built]
[./entry-1.js] ./entry-1.js + 2 modules 190 bytes {0} [built]
Child
Hash: bb2d69615a180135bcde
Hash: 01bd4246a474bfd828f8
Time: Xms
Asset Size Chunks Chunk Names
app.js 673 bytes 0 [emitted] app

View File

@ -1,12 +1,12 @@
Hash: 3cc0d6b1ff5f64f9667a5b4570daab591bb1c99b
Hash: bb44149cc6ff44057a6db39ed0896245106f412b
Child
Hash: 3cc0d6b1ff5f64f9667a
Hash: bb44149cc6ff44057a6d
Time: Xms
Asset Size Chunks Chunk Names
main.js 2.62 KiB 0 [emitted] main
[0] ./index.js 24 bytes {0} [built]
Child
Hash: 5b4570daab591bb1c99b
Hash: b39ed0896245106f412b
Time: Xms
Asset Size Chunks Chunk Names
main.js 2.62 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: 097436097dd8213a68b7
Hash: 0c78424b0f03182d4365
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 3.03 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: dfff25717ba14e81a924
Hash: eec74eeea2d377db0b5a
Time: Xms
Asset Size Chunks Chunk Names
main.js 2.73 KiB 0 [emitted] main

View File

@ -1,6 +1,6 @@
Hash: 1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea30497d996dfd40bcc9ea304
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
@ -18,37 +18,37 @@ Child
Dropping unused function someRemoteUnUsedFunction4 [./a.js:6,0]
Dropping unused function someRemoteUnUsedFunction5 [./a.js:7,0]
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
@ -66,7 +66,7 @@ Child
Dropping unused function someRemoteUnUsedFunction4 [./a.js:6,0]
Dropping unused function someRemoteUnUsedFunction5 [./a.js:7,0]
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
@ -84,7 +84,7 @@ Child
Dropping unused function someRemoteUnUsedFunction4 [./a.js:6,0]
Dropping unused function someRemoteUnUsedFunction5 [./a.js:7,0]
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
@ -102,7 +102,7 @@ Child
Dropping unused function someRemoteUnUsedFunction4 [./a.js:6,0]
Dropping unused function someRemoteUnUsedFunction5 [./a.js:7,0]
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
@ -120,7 +120,7 @@ Child
Dropping unused function someRemoteUnUsedFunction4 [./a.js:6,0]
Dropping unused function someRemoteUnUsedFunction5 [./a.js:7,0]
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main
@ -138,7 +138,7 @@ Child
Dropping unused function someRemoteUnUsedFunction4 [./a.js:6,0]
Dropping unused function someRemoteUnUsedFunction5 [./a.js:7,0]
Child
Hash: 1d6fab3f37874a94af1d
Hash: 97d996dfd40bcc9ea304
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: d0973910493cc5189e80
Hash: 849b4edd059844e28e79
Time: Xms
Asset Size Chunks Chunk Names
0.js 308 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 222921686dab1fa295e6
Hash: 76f3311214153561286d
Time: Xms
Asset Size Chunks Chunk Names
0.js 149 bytes 0 [emitted]

View File

@ -1,6 +1,6 @@
Hash: 566e6d86b3b6998ceb45ec6b4377b990cf9aa0f27df19c8a49efc26d8a82c0aba64e48df19532dd6
Hash: 0bcb77c121105f5554b0ab68321fd63b5c89a52e03de2ce08eb5c10082da62928bff1601bb294074
Child
Hash: 566e6d86b3b6998ceb45
Hash: 0bcb77c121105f5554b0
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 3.79 KiB 0 [emitted] main
@ -12,7 +12,7 @@ Child
[4] ./d.js 22 bytes {0} [built]
[5] ./e.js 22 bytes {0} [built]
Child
Hash: ec6b4377b990cf9aa0f2
Hash: ab68321fd63b5c89a52e
Time: Xms
Asset Size Chunks Chunk Names
0.bundle.js 941 bytes 0 [emitted]
@ -26,7 +26,7 @@ Child
chunk {1} bundle.js (main) 73 bytes [entry] [rendered]
[0] ./index.js 73 bytes {1} [built]
Child
Hash: 7df19c8a49efc26d8a82
Hash: 03de2ce08eb5c10082da
Time: Xms
Asset Size Chunks Chunk Names
0.bundle.js 794 bytes 0 [emitted]
@ -42,7 +42,7 @@ Child
chunk {2} bundle.js (main) 73 bytes [entry] [rendered]
[0] ./index.js 73 bytes {2} [built]
Child
Hash: c0aba64e48df19532dd6
Hash: 62928bff1601bb294074
Time: Xms
Asset Size Chunks Chunk Names
0.bundle.js 232 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 16c755b3da4ebf036ffb
Hash: bd81f720878983455ffa
Time: Xms
Asset Size Chunks Chunk Names
main.js 5.84 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: 16c755b3da4ebf036ffb
Hash: bd81f720878983455ffa
Time: Xms
Asset Size Chunks Chunk Names
main.js 5.84 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: 342fdebfd3bf4930e50e
Hash: 4395fd92d4570f9ff7ee
Time: Xms
Asset Size Chunks Chunk Names
chunk-containing-__a_js.js 461 bytes chunk-containing-__a_js [emitted]

View File

@ -1,4 +1,4 @@
Hash: ab4e2d3ab74da1024437
Hash: 721576e28d8fd9ef466a
Time: Xms
Asset Size Chunks Chunk Names
entry.js 425 bytes entry [emitted] entry

View File

@ -1,4 +1,4 @@
Hash: 82c14b6bc607dc9d3f12
Hash: ad2b1e5741d17c324536
Time: Xms
Asset Size Chunks Chunk Names
0.js 281 bytes 0 [emitted] cir1

View File

@ -1,4 +1,4 @@
Hash: 54caedd6b3654722c2b3
Hash: 91ae48f7eb2c733a3e1b
Time: Xms
Asset Size Chunks Chunk Names
0.js 288 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 54caedd6b3654722c2b3
Hash: 91ae48f7eb2c733a3e1b
Time: Xms
Asset Size Chunks Chunk Names
0.js 288 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: 54caedd6b3654722c2b3
Hash: 91ae48f7eb2c733a3e1b
Time: Xms
Asset Size Chunks Chunk Names
0.js 288 bytes 0 [emitted]

View File

@ -1,4 +1,4 @@
Hash: a0254dbb48c63efa572d
Hash: 405c9e2b6a4d5ab4698b
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 3 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: 16c755b3da4ebf036ffb
Hash: bd81f720878983455ffa
Time: Xms
Asset Size Chunks Chunk Names
main.js 5.84 KiB 0 [emitted] main

View File

@ -1,6 +1,6 @@
Hash: 1a1fc03e39a800dd03d4ac95f6addf9bb1d962a3
Hash: 332364d475206d108d3f658ab07cd2982e743929
Child
Hash: 1a1fc03e39a800dd03d4
Hash: 332364d475206d108d3f
Time: Xms
[0] ./common2.js 25 bytes {3} {4} [built]
[1] ./common_lazy_shared.js 25 bytes {0} {1} {2} [built]
@ -14,7 +14,7 @@ Child
[9] ./second.js 177 bytes {4} [built]
[10] ./lazy_second.js 55 bytes {1} [built]
Child
Hash: ac95f6addf9bb1d962a3
Hash: 658ab07cd2982e743929
Time: Xms
[0] ./common_lazy_shared.js 25 bytes {0} {1} {2} [built]
[1] ./vendor.js 25 bytes {5} [built]

View File

@ -1,6 +1,6 @@
Hash: b584cac33dcb8d5e4aed9dcac735d940c7d4c5dc
Hash: aa1b352e571b0ba5e7f5d37c33df2ddf3d79c4f9
Child
Hash: b584cac33dcb8d5e4aed
Hash: aa1b352e571b0ba5e7f5
Time: Xms
Asset Size Chunks Chunk Names
d6c1b876fc64139d8324.js 2.74 KiB 0 [emitted] main
@ -15,7 +15,7 @@ Child
[0] (webpack)/node_modules/css-loader!./a/file.css 199 bytes {0} [built]
[1] (webpack)/node_modules/css-loader/lib/css-base.js 2.21 KiB {0} [built]
Child
Hash: 9dcac735d940c7d4c5dc
Hash: d37c33df2ddf3d79c4f9
Time: Xms
Asset Size Chunks Chunk Names
d6c1b876fc64139d8324.js 2.74 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: 0e0e2911fbf1998bcee2
Hash: e9d1bffdef1d29b98a2b
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.6 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: 1021800667e51386395b
Hash: d6a9c7976d858b3be90d
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.88 KiB main [emitted] main

View File

@ -1,4 +1,4 @@
Hash: e757ae6deb2207018ba1
Hash: 49e821941ea65a02bbc9
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 7.26 KiB 0 [emitted] main

View File

@ -1,4 +1,4 @@
Hash: c31972007fbc9e1916a0
Hash: f6eb3b161149e35ef9e6
Time: Xms
Asset Size Chunks Chunk Names
bundle.js 2.19 KiB 0 [emitted] main