Skip to content

Commit 355763a

Browse files
committed
added support for scoped dlls
1 parent 4fdf62b commit 355763a

File tree

6 files changed

+100
-42
lines changed

6 files changed

+100
-42
lines changed

examples/dll-user/README.md

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
console.log(require("../dll/alpha"));
55
console.log(require("../dll/a"));
66

7-
//console.log(require("beta/beta"));
8-
//console.log(require("beta/b"));
7+
console.log(require("beta/beta"));
8+
console.log(require("beta/b"));
99
```
1010

1111
# js/output.js
@@ -63,15 +63,15 @@ console.log(require("../dll/a"));
6363
console.log(__webpack_require__(/*! ../dll/alpha */ 1));
6464
console.log(__webpack_require__(/*! ../dll/a */ 3));
6565

66-
//console.log(require("beta/beta"));
67-
//console.log(require("beta/b"));
66+
console.log(__webpack_require__(/*! beta/beta */ 4));
67+
console.log(__webpack_require__(/*! beta/b */ 6));
6868

6969

7070
/***/ },
7171
/* 1 */
72-
/*!*****************************************************************!*\
73-
!*** delegated 1 from dll-reference alpha_fda802f3c408a66ef744 ***!
74-
\*****************************************************************/
72+
/*!**************************************************************************!*\
73+
!*** delegated ./alpha.js from dll-reference alpha_fda802f3c408a66ef744 ***!
74+
\**************************************************************************/
7575
/***/ function(module, exports, __webpack_require__) {
7676

7777
module.exports = (__webpack_require__(2))(1);
@@ -87,13 +87,40 @@ console.log(require("../dll/a"));
8787

8888
/***/ },
8989
/* 3 */
90-
/*!*****************************************************************!*\
91-
!*** delegated 2 from dll-reference alpha_fda802f3c408a66ef744 ***!
92-
\*****************************************************************/
90+
/*!**********************************************************************!*\
91+
!*** delegated ./a.js from dll-reference alpha_fda802f3c408a66ef744 ***!
92+
\**********************************************************************/
9393
/***/ function(module, exports, __webpack_require__) {
9494

9595
module.exports = (__webpack_require__(2))(2);
9696

97+
/***/ },
98+
/* 4 */
99+
/*!************************************************************************!*\
100+
!*** delegated ./beta.js from dll-reference beta_fda802f3c408a66ef744 ***!
101+
\************************************************************************/
102+
/***/ function(module, exports, __webpack_require__) {
103+
104+
module.exports = (__webpack_require__(5))(3);
105+
106+
/***/ },
107+
/* 5 */
108+
/*!********************************************!*\
109+
!*** external "beta_fda802f3c408a66ef744" ***!
110+
\********************************************/
111+
/***/ function(module, exports, __webpack_require__) {
112+
113+
module.exports = beta_fda802f3c408a66ef744;
114+
115+
/***/ },
116+
/* 6 */
117+
/*!*********************************************************************!*\
118+
!*** delegated ./b.js from dll-reference beta_fda802f3c408a66ef744 ***!
119+
\*********************************************************************/
120+
/***/ function(module, exports, __webpack_require__) {
121+
122+
module.exports = (__webpack_require__(5))(4);
123+
97124
/***/ }
98125
/******/ ]);
99126
```
@@ -103,27 +130,27 @@ console.log(require("../dll/a"));
103130
## Uncompressed
104131

105132
```
106-
Hash: 08ef761d3df9cb02c0ab
133+
Hash: 0d8279ed7b443d36b536
107134
Version: webpack 1.9.5
108-
Time: 43ms
135+
Time: 84ms
109136
Asset Size Chunks Chunk Names
110-
output.js 2.62 kB 0 [emitted] main
111-
chunk {0} output.js (main) 275 bytes [rendered]
137+
output.js 3.66 kB 0 [emitted] main
138+
chunk {0} output.js (main) 397 bytes [rendered]
112139
> main [0] ./example.js
113-
[0] ./example.js 149 bytes {0} [built]
114-
+ 3 hidden modules
140+
[0] ./example.js 145 bytes {0} [built]
141+
+ 6 hidden modules
115142
```
116143

117144
## Minimized (uglify-js, no zip)
118145

119146
```
120-
Hash: c02a95197e755bb65192
147+
Hash: 1e9d431b3cebd3bcea12
121148
Version: webpack 1.9.5
122-
Time: 107ms
149+
Time: 170ms
123150
Asset Size Chunks Chunk Names
124-
output.js 382 bytes 0 [emitted] main
125-
chunk {0} output.js (main) 275 bytes [rendered]
151+
output.js 541 bytes 0 [emitted] main
152+
chunk {0} output.js (main) 397 bytes [rendered]
126153
> main [0] ./example.js
127-
[0] ./example.js 149 bytes {0} [built]
128-
+ 3 hidden modules
154+
[0] ./example.js 145 bytes {0} [built]
155+
+ 6 hidden modules
129156
```

examples/dll-user/example.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<html>
2+
<head></head>
3+
<body>
4+
<script src="../dll/js/MyDll.alpha.js" charset="utf-8"></script>
5+
<script src="../dll/js/MyDll.beta.js" charset="utf-8"></script>
6+
<script src="js/output.js" charset="utf-8"></script>
7+
</body>
8+
</html>

examples/dll-user/example.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
console.log(require("../dll/alpha"));
22
console.log(require("../dll/a"));
33

4-
//console.log(require("beta/beta"));
5-
//console.log(require("beta/b"));
4+
console.log(require("beta/beta"));
5+
console.log(require("beta/b"));

examples/dll-user/webpack.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ module.exports = {
66
context: path.join(__dirname, "..", "dll"),
77
manifest: require("../dll/js/alpha-manifest.json")
88
}),
9-
/* new DllReferencePlugin({
9+
new DllReferencePlugin({
1010
scope: "beta",
1111
manifest: require("../dll/js/beta-manifest.json")
1212
})
13-
*/ ]
13+
]
1414
};

lib/DelegatedModule.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ var RawSource = require("webpack-core/lib/RawSource");
88
var WebpackMissingModule = require("./dependencies/WebpackMissingModule");
99
var DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
1010

11-
function DelegatedModule(sourceRequest, request, type) {
11+
function DelegatedModule(sourceRequest, request, type, userRequest) {
1212
Module.call(this);
1313
this.sourceRequest = sourceRequest;
1414
this.request = request;
1515
this.type = type;
16+
this.userRequest = userRequest;
1617
this.built = false;
1718
}
1819
module.exports = DelegatedModule;
@@ -26,7 +27,7 @@ DelegatedModule.prototype.identifier = function() {
2627
};
2728

2829
DelegatedModule.prototype.readableIdentifier = function() {
29-
return "delegated " + JSON.stringify(this.request) + " from " + this.sourceRequest;
30+
return "delegated " + this.userRequest + " from " + this.sourceRequest;
3031
};
3132

3233
DelegatedModule.prototype.needRebuild = function() {

lib/DelegatedModuleFactoryPlugin.js

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,48 @@
44
*/
55
var DelegatedModule = require("./DelegatedModule");
66

7+
// options.source
8+
// options.type
9+
// options.context
10+
// options.scope
11+
// options.content
712
function DelegatedModuleFactoryPlugin(options) {
813
this.options = options;
914
options.type = options.type || "require";
10-
// this.source = source;
11-
// this.type = type;
12-
// this.scope = scope;
13-
// this.context = context;
14-
// this.content = content;
15+
options.extensions = options.extensions || ["", ".js"];
1516
}
1617
module.exports = DelegatedModuleFactoryPlugin;
1718

1819
DelegatedModuleFactoryPlugin.prototype.apply = function(normalModuleFactory) {
19-
normalModuleFactory.plugin("module", function(module) {
20-
if(module.libIdent) {
21-
var request = module.libIdent(this.options);
22-
if(request && request in this.options.content) {
23-
var resolved = this.options.content[request];
24-
return new DelegatedModule(this.options.source, resolved, this.options.type);
20+
var scope = this.options.scope;
21+
if(scope) {
22+
normalModuleFactory.plugin("factory", function(factory) {
23+
return function(data, callback) {
24+
var dependency = data.dependency;
25+
var request = dependency.request;
26+
if(request && request.indexOf(scope + "/") === 0) {
27+
var innerRequest = "." + request.substr(scope.length);
28+
for(var i = 0; i < this.options.extensions.length; i++) {
29+
var requestPlusExt = innerRequest + this.options.extensions[i];
30+
if(requestPlusExt in this.options.content) {
31+
var resolved = this.options.content[requestPlusExt];
32+
return callback(null, new DelegatedModule(this.options.source, resolved, this.options.type, requestPlusExt));
33+
}
34+
}
35+
}
36+
return factory(data, callback);
37+
}.bind(this);
38+
}.bind(this));
39+
} else {
40+
normalModuleFactory.plugin("module", function(module) {
41+
if(module.libIdent) {
42+
var request = module.libIdent(this.options);
43+
if(request && request in this.options.content) {
44+
var resolved = this.options.content[request];
45+
return new DelegatedModule(this.options.source, resolved, this.options.type, request);
46+
}
2547
}
26-
}
27-
return module;
28-
}.bind(this));
48+
return module;
49+
}.bind(this));
50+
}
2951
};

0 commit comments

Comments
 (0)