Skip to content

Commit b742264

Browse files
committed
add UMD, closed webpack#71
1 parent 034b5e5 commit b742264

File tree

4 files changed

+45
-26
lines changed

4 files changed

+45
-26
lines changed

lib/CommonJsMainTemplateDecorator.js

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

lib/LibraryTemplatePlugin.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Author Tobias Koppers @sokra
44
*/
55
var SetVarMainTemplateDecorator = require("./SetVarMainTemplateDecorator");
6-
var CommonJsMainTemplateDecorator = require("./CommonJsMainTemplateDecorator");
6+
var UmdMainTemplateDecorator = require("./UmdMainTemplateDecorator");
77

88
function LibraryTemplatePlugin(name, target) {
99
this.name = name;
@@ -25,7 +25,10 @@ LibraryTemplatePlugin.prototype.apply = function(compiler) {
2525
compiler.mainTemplate = new SetVarMainTemplateDecorator(compiler.mainTemplate, "exports[" + JSON.stringify(this.name) + "]");
2626
break;
2727
case "commonjs2":
28-
compiler.mainTemplate = new CommonJsMainTemplateDecorator(compiler.mainTemplate);
28+
compiler.mainTemplate = new SetVarMainTemplateDecorator(compiler.mainTemplate, "module.exports");
29+
break;
30+
case "umd":
31+
compiler.mainTemplate = new UmdMainTemplateDecorator(compiler.mainTemplate, this.name);
2932
break;
3033
default:
3134
throw new Error(this.target + " is not a valid Library target");

lib/SetVarMainTemplateDecorator.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
var WrapSource = require("./WrapSource");
66
var RawSource = require("webpack-core/lib/RawSource");
77

8-
function CommonJsMainTemplateDecorator(mainTemplate, varExpression) {
8+
function SetVarMainTemplateDecorator(mainTemplate, varExpression) {
99
this.mainTemplate = mainTemplate;
1010
this.varExpression = varExpression;
1111
}
12-
module.exports = CommonJsMainTemplateDecorator;
13-
CommonJsMainTemplateDecorator.prototype.render = function(hash, chunk, moduleTemplate, dependencyTemplates) {
12+
module.exports = SetVarMainTemplateDecorator;
13+
SetVarMainTemplateDecorator.prototype.render = function(hash, chunk, moduleTemplate, dependencyTemplates) {
1414
var source = this.mainTemplate.render(hash, chunk, moduleTemplate, dependencyTemplates);
1515
var prefix = this.varExpression + " =\n";
1616
return new WrapSource(new RawSource(prefix), source, new RawSource(""));
1717
};
18-
CommonJsMainTemplateDecorator.prototype.updateHash = function(hash) {
18+
SetVarMainTemplateDecorator.prototype.updateHash = function(hash) {
1919
hash.update("set var");
2020
hash.update(this.varExpression);
2121
this.mainTemplate.updateHash(hash);

lib/UmdMainTemplateDecorator.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
var WrapSource = require("./WrapSource");
6+
var RawSource = require("webpack-core/lib/RawSource");
7+
8+
function UmdMainTemplateDecorator(mainTemplate, name) {
9+
this.mainTemplate = mainTemplate;
10+
this.name = name;
11+
}
12+
module.exports = UmdMainTemplateDecorator;
13+
UmdMainTemplateDecorator.prototype.render = function(hash, chunk, moduleTemplate, dependencyTemplates) {
14+
var source = this.mainTemplate.render(hash, chunk, moduleTemplate, dependencyTemplates);
15+
var prefix = "module.exports =\n";
16+
return new WrapSource(new RawSource(
17+
"(function webpackUniversalModuleDefinition(root) {\n" +
18+
" return function webpackUniversalModuleDefinitionWrapBootstrap(fn) {\n" +
19+
" return function webpackUniversalModuleDefinitionBootstrap(modules) {\n" +
20+
" if(typeof exports === 'object' && typeof module === 'object')\n" +
21+
" module.exports = fn(modules);\n" +
22+
" else if(typeof define === 'function' && define.amd)\n" +
23+
" define(function() { return fn(modules); });\n" +
24+
" else if(typeof exports === 'object')\n" +
25+
" exports[" + JSON.stringify(this.name) + "] = fn(modules);\n" +
26+
" else\n" +
27+
" root[" + JSON.stringify(this.name) + "] = fn(modules);\n" +
28+
" }\n" +
29+
" }\n" +
30+
"})(this)\n"), source, new RawSource(""));
31+
};
32+
UmdMainTemplateDecorator.prototype.updateHash = function(hash) {
33+
hash.update("umd");
34+
hash.update(this.name);
35+
this.mainTemplate.updateHash(hash);
36+
};

0 commit comments

Comments
 (0)