Skip to content

Commit 440b5df

Browse files
committed
use original request as libIdent for delegated modules
add more tests
1 parent 8f26f9e commit 440b5df

5 files changed

Lines changed: 49 additions & 15 deletions

File tree

lib/DelegatedModule.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,28 @@
44
*/
55
"use strict";
66

7-
const path = require("path");
87
const Module = require("./Module");
98
const OriginalSource = require("webpack-sources").OriginalSource;
109
const RawSource = require("webpack-sources").RawSource;
1110
const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
1211
const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
1312

1413
class DelegatedModule extends Module {
15-
constructor(sourceRequest, data, type, userRequest) {
14+
constructor(sourceRequest, data, type, userRequest, originalRequest) {
1615
super();
1716
this.sourceRequest = sourceRequest;
1817
this.request = data.id;
1918
this.meta = data.meta;
2019
this.type = type;
20+
this.originalRequest = originalRequest;
2121
this.userRequest = userRequest;
2222
this.built = false;
2323
this.delegated = true;
2424
this.delegateData = data;
2525
}
2626

27-
contextify(context, request) {
28-
return request.split("!").map(function(r) {
29-
let rp = path.relative(context, r).replace(/\\/g, "/");
30-
return rp.indexOf("../") !== 0 ? "./" + rp : rp;
31-
}).join("!");
32-
}
33-
3427
libIdent(options) {
35-
return this.contextify(options.context, this.userRequest);
28+
return typeof this.originalRequest === "string" ? this.originalRequest : this.originalRequest.libIdent(options);
3629
}
3730

3831
identifier() {
@@ -50,6 +43,7 @@ class DelegatedModule extends Module {
5043
build(options, compilation, resolver, fs, callback) {
5144
this.built = true;
5245
this.builtTime = Date.now();
46+
this.cacheable = true;
5347
this.usedExports = true;
5448
this.providedExports = this.delegateData.exports || true;
5549
this.dependencies.length = 0;

lib/DelegatedModuleFactoryPlugin.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@ class DelegatedModuleFactoryPlugin {
2929
let resolved;
3030
if(innerRequest in this.options.content) {
3131
resolved = this.options.content[innerRequest];
32-
return callback(null, new DelegatedModule(this.options.source, resolved, this.options.type, innerRequest));
32+
return callback(null, new DelegatedModule(this.options.source, resolved, this.options.type, innerRequest, request));
3333
}
3434
for(let i = 0; i < this.options.extensions.length; i++) {
35-
const requestPlusExt = innerRequest + this.options.extensions[i];
35+
const extension = this.options.extensions[i];
36+
const requestPlusExt = innerRequest + extension;
3637
if(requestPlusExt in this.options.content) {
3738
resolved = this.options.content[requestPlusExt];
38-
return callback(null, new DelegatedModule(this.options.source, resolved, this.options.type, requestPlusExt));
39+
return callback(null, new DelegatedModule(this.options.source, resolved, this.options.type, requestPlusExt, request + extension));
3940
}
4041
}
4142
}
@@ -47,7 +48,7 @@ class DelegatedModuleFactoryPlugin {
4748
const request = module.libIdent(this.options);
4849
if(request && request in this.options.content) {
4950
const resolved = this.options.content[request];
50-
return new DelegatedModule(this.options.source, resolved, this.options.type, request);
51+
return new DelegatedModule(this.options.source, resolved, this.options.type, request, module);
5152
}
5253
}
5354
return module;

test/configCases/dll-plugin/1-use-dll/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,19 @@ it("should load an harmony module from dll (star export)", function() {
3232
it("should load a module with loader applied", function() {
3333
require("dll/g.abc.js").should.be.eql("number");
3434
});
35+
36+
it("should give modules the correct ids", function() {
37+
Object.keys(__webpack_modules__).filter(m => !m.startsWith("../..")).should.be.eql([
38+
"./e.js",
39+
"./index.js",
40+
"dll-reference ../0-create-dll/dll.js",
41+
"dll/a.js",
42+
"dll/b.js",
43+
"dll/d.js",
44+
"dll/e.js",
45+
"dll/e1.js",
46+
"dll/e2.js",
47+
"dll/f.jsx",
48+
"dll/g.abc.js"
49+
]);
50+
});

test/configCases/dll-plugin/2-use-dll-without-scope/index.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ it("should load a module from dll", function() {
77
require("../0-create-dll/a").should.be.eql("a");
88
});
99

10+
it("should load a module of non-default type without extension from dll", function() {
11+
require("../0-create-dll/f").should.be.eql("f");
12+
});
13+
1014
it("should load an async module from dll", function(done) {
1115
require("../0-create-dll/b")().then(function(c) {
1216
c.should.be.eql({ default: "c" });
@@ -27,4 +31,20 @@ it("should load an harmony module from dll (star export)", function() {
2731

2832
it("should load a module with loader applied", function() {
2933
require("../0-create-dll/g.abc.js").should.be.eql("number");
30-
})
34+
});
35+
36+
it("should give modules the correct ids", function() {
37+
Object.keys(__webpack_modules__).filter(m => !m.startsWith("../..")).should.be.eql([
38+
"../0-create-dll/a.js",
39+
"../0-create-dll/b.js",
40+
"../0-create-dll/d.js",
41+
"../0-create-dll/e.js",
42+
"../0-create-dll/e1.js",
43+
"../0-create-dll/e2.js",
44+
"../0-create-dll/f.jsx",
45+
"../0-create-dll/g.abc.js",
46+
"./e.js",
47+
"./index.js",
48+
"dll-reference ../0-create-dll/dll.js"
49+
]);
50+
});

test/configCases/dll-plugin/2-use-dll-without-scope/webpack.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ module.exports = {
1515
] }
1616
]
1717
},
18+
resolve: {
19+
extensions: [".js", ".jsx"]
20+
},
1821
plugins: [
1922
new webpack.DllReferencePlugin({
2023
manifest: require("../../../js/config/dll-plugin/manifest0.json"), // eslint-disable-line node/no-missing-require

0 commit comments

Comments
 (0)