291 lines
6.6 KiB
JavaScript
291 lines
6.6 KiB
JavaScript
"use strict";
|
|
|
|
require("./helpers/warmup-webpack");
|
|
|
|
const { createFsFromVolume, Volume } = require("memfs");
|
|
|
|
const compile = options => {
|
|
return new Promise((resolve, reject) => {
|
|
const webpack = require("..");
|
|
const compiler = webpack(options);
|
|
compiler.outputFileSystem = createFsFromVolume(new Volume());
|
|
compiler.run((err, stats) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve(stats);
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
describe("Stats", () => {
|
|
it("should print env string in stats", async () => {
|
|
const stats = await compile({
|
|
context: __dirname,
|
|
entry: "./fixtures/a"
|
|
});
|
|
expect(
|
|
stats.toString({
|
|
all: false,
|
|
env: true,
|
|
_env: "production"
|
|
})
|
|
).toBe('Environment (--env): "production"');
|
|
expect(
|
|
stats.toString({
|
|
all: false,
|
|
env: true,
|
|
_env: {
|
|
prod: ["foo", "bar"],
|
|
baz: true
|
|
}
|
|
})
|
|
).toBe(
|
|
"Environment (--env): {\n" +
|
|
' "prod": [\n' +
|
|
' "foo",\n' +
|
|
' "bar"\n' +
|
|
" ],\n" +
|
|
' "baz": true\n' +
|
|
"}"
|
|
);
|
|
});
|
|
it("should omit all properties with all false", async () => {
|
|
const stats = await compile({
|
|
context: __dirname,
|
|
entry: "./fixtures/a"
|
|
});
|
|
expect(
|
|
stats.toJson({
|
|
all: false
|
|
})
|
|
).toEqual({});
|
|
});
|
|
describe("chunkGroups", () => {
|
|
it("should be empty when there is no additional chunks", async () => {
|
|
const stats = await compile({
|
|
context: __dirname,
|
|
entry: {
|
|
entryA: "./fixtures/a",
|
|
entryB: "./fixtures/b"
|
|
}
|
|
});
|
|
expect(
|
|
stats.toJson({
|
|
all: false,
|
|
errorsCount: true,
|
|
chunkGroups: true
|
|
})
|
|
).toMatchInlineSnapshot(`
|
|
Object {
|
|
"errorsCount": 0,
|
|
"namedChunkGroups": Object {
|
|
"entryA": Object {
|
|
"assets": Array [
|
|
Object {
|
|
"name": "entryA.js",
|
|
"size": 196,
|
|
},
|
|
],
|
|
"assetsSize": 196,
|
|
"auxiliaryAssets": undefined,
|
|
"auxiliaryAssetsSize": 0,
|
|
"childAssets": undefined,
|
|
"children": undefined,
|
|
"chunks": undefined,
|
|
"filteredAssets": 0,
|
|
"filteredAuxiliaryAssets": 0,
|
|
"name": "entryA",
|
|
},
|
|
"entryB": Object {
|
|
"assets": Array [
|
|
Object {
|
|
"name": "entryB.js",
|
|
"size": 196,
|
|
},
|
|
],
|
|
"assetsSize": 196,
|
|
"auxiliaryAssets": undefined,
|
|
"auxiliaryAssetsSize": 0,
|
|
"childAssets": undefined,
|
|
"children": undefined,
|
|
"chunks": undefined,
|
|
"filteredAssets": 0,
|
|
"filteredAuxiliaryAssets": 0,
|
|
"name": "entryB",
|
|
},
|
|
},
|
|
}
|
|
`);
|
|
});
|
|
it("should contain additional chunks", async () => {
|
|
const stats = await compile({
|
|
context: __dirname,
|
|
entry: {
|
|
entryA: "./fixtures/a",
|
|
entryB: "./fixtures/chunk-b"
|
|
}
|
|
});
|
|
expect(
|
|
stats.toJson({
|
|
all: false,
|
|
errorsCount: true,
|
|
chunkGroups: true
|
|
})
|
|
).toMatchInlineSnapshot(`
|
|
Object {
|
|
"errorsCount": 0,
|
|
"namedChunkGroups": Object {
|
|
"chunkB": Object {
|
|
"assets": Array [
|
|
Object {
|
|
"name": "chunkB.js",
|
|
"size": 107,
|
|
},
|
|
],
|
|
"assetsSize": 107,
|
|
"auxiliaryAssets": undefined,
|
|
"auxiliaryAssetsSize": 0,
|
|
"childAssets": undefined,
|
|
"children": undefined,
|
|
"chunks": undefined,
|
|
"filteredAssets": 0,
|
|
"filteredAuxiliaryAssets": 0,
|
|
"name": "chunkB",
|
|
},
|
|
"entryA": Object {
|
|
"assets": Array [
|
|
Object {
|
|
"name": "entryA.js",
|
|
"size": 196,
|
|
},
|
|
],
|
|
"assetsSize": 196,
|
|
"auxiliaryAssets": undefined,
|
|
"auxiliaryAssetsSize": 0,
|
|
"childAssets": undefined,
|
|
"children": undefined,
|
|
"chunks": undefined,
|
|
"filteredAssets": 0,
|
|
"filteredAuxiliaryAssets": 0,
|
|
"name": "entryA",
|
|
},
|
|
"entryB": Object {
|
|
"assets": Array [
|
|
Object {
|
|
"name": "entryB.js",
|
|
"size": 2961,
|
|
},
|
|
],
|
|
"assetsSize": 2961,
|
|
"auxiliaryAssets": undefined,
|
|
"auxiliaryAssetsSize": 0,
|
|
"childAssets": undefined,
|
|
"children": undefined,
|
|
"chunks": undefined,
|
|
"filteredAssets": 0,
|
|
"filteredAuxiliaryAssets": 0,
|
|
"name": "entryB",
|
|
},
|
|
},
|
|
}
|
|
`);
|
|
});
|
|
it("should contain assets", async () => {
|
|
const stats = await compile({
|
|
context: __dirname,
|
|
entry: {
|
|
entryA: "./fixtures/a",
|
|
entryB: "./fixtures/chunk-b"
|
|
}
|
|
});
|
|
expect(
|
|
stats.toJson({
|
|
all: false,
|
|
errorsCount: true,
|
|
assets: true
|
|
})
|
|
).toMatchInlineSnapshot(`
|
|
Object {
|
|
"assets": Array [
|
|
Object {
|
|
"auxiliaryChunkIdHints": Array [],
|
|
"auxiliaryChunkNames": Array [],
|
|
"cached": false,
|
|
"chunkIdHints": Array [],
|
|
"chunkNames": Array [
|
|
"entryB",
|
|
],
|
|
"comparedForEmit": false,
|
|
"emitted": true,
|
|
"filteredRelated": undefined,
|
|
"info": Object {
|
|
"javascriptModule": false,
|
|
"minimized": true,
|
|
"size": 2961,
|
|
},
|
|
"name": "entryB.js",
|
|
"size": 2961,
|
|
"type": "asset",
|
|
},
|
|
Object {
|
|
"auxiliaryChunkIdHints": Array [],
|
|
"auxiliaryChunkNames": Array [],
|
|
"cached": false,
|
|
"chunkIdHints": Array [],
|
|
"chunkNames": Array [
|
|
"entryA",
|
|
],
|
|
"comparedForEmit": false,
|
|
"emitted": true,
|
|
"filteredRelated": undefined,
|
|
"info": Object {
|
|
"javascriptModule": false,
|
|
"minimized": true,
|
|
"size": 196,
|
|
},
|
|
"name": "entryA.js",
|
|
"size": 196,
|
|
"type": "asset",
|
|
},
|
|
Object {
|
|
"auxiliaryChunkIdHints": Array [],
|
|
"auxiliaryChunkNames": Array [],
|
|
"cached": false,
|
|
"chunkIdHints": Array [],
|
|
"chunkNames": Array [
|
|
"chunkB",
|
|
],
|
|
"comparedForEmit": false,
|
|
"emitted": true,
|
|
"filteredRelated": undefined,
|
|
"info": Object {
|
|
"javascriptModule": false,
|
|
"minimized": true,
|
|
"size": 107,
|
|
},
|
|
"name": "chunkB.js",
|
|
"size": 107,
|
|
"type": "asset",
|
|
},
|
|
],
|
|
"assetsByChunkName": Object {
|
|
"chunkB": Array [
|
|
"chunkB.js",
|
|
],
|
|
"entryA": Array [
|
|
"entryA.js",
|
|
],
|
|
"entryB": Array [
|
|
"entryB.js",
|
|
],
|
|
},
|
|
"errorsCount": 0,
|
|
"filteredAssets": undefined,
|
|
}
|
|
`);
|
|
});
|
|
});
|
|
});
|