updates to enhanced-require, optimizing amd

This commit is contained in:
Tobias Koppers 2012-08-23 18:43:25 +02:00
parent 3d08e8cf14
commit 638e82254a
6 changed files with 34 additions and 39 deletions

View File

@ -238,7 +238,7 @@ var b = require("./b"); // and files
// like in node.js // like in node.js
// polyfill require method to use the new members in node.js too // polyfill require method to use the new members in node.js too
require = require("enhanced-require")(__filename, require.valueOf()); require = require("enhanced-require")(module);
// create a lazy loaded bundle // create a lazy loaded bundle
require.ensure([], function(require) { require.ensure([], function(require) {

View File

@ -1,6 +1,5 @@
var amdRequire = require("./__webpack_amd_require"); var amdRequire = require("./__webpack_amd_require");
module.exports = function(module, req) { module.exports = function(module) {
req = amdRequire(req);
function define(id, dependencies, factory) { function define(id, dependencies, factory) {
if(typeof id != "number") { if(typeof id != "number") {
factory = dependencies; factory = dependencies;
@ -9,7 +8,7 @@ module.exports = function(module, req) {
} }
if(!factory) { if(!factory) {
factory = dependencies; factory = dependencies;
dependencies = [req, module.exports, module]; dependencies = [amdRequire, module.exports, module];
} }
var result = typeof factory == "function" ? factory.apply(null, dependencies) : factory; var result = typeof factory == "function" ? factory.apply(null, dependencies) : factory;
if(result !== undefined) if(result !== undefined)

View File

@ -1,20 +1,17 @@
function amdRequireFactory(req) { var req = require.valueOf();
function amdRequire(chunk, requiresFn, fn) { function amdRequire(chunk, requiresFn, fn) {
if(!requiresFn) { if(!requiresFn) {
// commonjs // commonjs
return req(chunk); return req(chunk);
}
req.e(chunk, function() {
var modules = requiresFn();
if(fn)
return fn.apply(null, modules);
});
} }
for(var name in req) req.e(chunk, function() {
amdRequire[name] = req[name]; var modules = requiresFn();
amdRequire.amd = amdRequireFactory.amd; if(fn)
amdRequire.config = function() {/* config is ignored, use webpack options */}; return fn.apply(null, modules);
return amdRequire; });
} }
amdRequireFactory.amd = {}; for(var name in req)
module.exports = amdRequireFactory; amdRequire[name] = req[name];
amdRequire.amd = {};
amdRequire.config = function() {/* config is ignored, use webpack options */};
module.exports = amdRequire;

View File

@ -259,7 +259,6 @@ function walkExpression(context, expression) {
context.requires = context.requires || []; context.requires = context.requires || [];
context.requires.push({ context.requires.push({
name: "__webpack_amd_require", name: "__webpack_amd_require",
append: "(require)",
line: expression.callee.loc.start.line, line: expression.callee.loc.start.line,
column: expression.callee.loc.start.column, column: expression.callee.loc.start.column,
variable: "require" variable: "require"
@ -277,7 +276,6 @@ function walkExpression(context, expression) {
context.requires = context.requires || []; context.requires = context.requires || [];
context.requires.push({ context.requires.push({
name: "__webpack_amd_require", name: "__webpack_amd_require",
append: "(require)",
line: expression.callee.loc.start.line, line: expression.callee.loc.start.line,
column: expression.callee.loc.start.column, column: expression.callee.loc.start.column,
variable: "require" variable: "require"
@ -326,7 +324,7 @@ function walkExpression(context, expression) {
context.requires = context.requires || []; context.requires = context.requires || [];
context.requires.push({ context.requires.push({
name: "__webpack_amd_define", name: "__webpack_amd_define",
append: "(module,require)", append: "(module)",
line: expression.callee.loc.start.line, line: expression.callee.loc.start.line,
column: expression.callee.loc.start.column, column: expression.callee.loc.start.column,
amdNameRange: amdNameRange, amdNameRange: amdNameRange,
@ -343,7 +341,7 @@ function walkExpression(context, expression) {
expression.callee.name === "define") { expression.callee.name === "define") {
context.requires.push({ context.requires.push({
name: "__webpack_amd_define", name: "__webpack_amd_define",
append: "(module,require)", append: "(module)",
line: expression.callee.loc.start.line, line: expression.callee.loc.start.line,
column: expression.callee.loc.start.column, column: expression.callee.loc.start.column,
variable: "define" variable: "define"
@ -363,7 +361,7 @@ function walkExpression(context, expression) {
context.requires = context.requires || []; context.requires = context.requires || [];
context.requires.push({ context.requires.push({
name: "__webpack_amd_define", name: "__webpack_amd_define",
append: "(module,require)", append: "(module)",
amdNameRange: expression.arguments[0].range, amdNameRange: expression.arguments[0].range,
label: expression.arguments[0].value+"", label: expression.arguments[0].value+"",
line: expression.callee.loc.start.line, line: expression.callee.loc.start.line,

View File

@ -1,5 +1,6 @@
// Should not break it... should not include complete directory... // Should not break it... should not include complete directory...
require = require("../../../require-polyfill")(require.valueOf()); require = require("enhanced-require")(module);
if(typeof define != "function") var define = require.define;
window.test(true, "index.js should be replaced with index.web.js"); window.test(true, "index.js should be replaced with index.web.js");
require("script!../js/libary1.js"); require("script!../js/libary1.js");
@ -161,26 +162,26 @@ window.test(require("./singluar2") !== singlarObj, "require.cache can be deleted
// AMD // AMD
var template = "tmpl"; var template = "tmpl";
var amdLoaded = 0; var amdLoaded = "";
require(["./circular", "../templates/" + template, true ? "./circular" : "./circular"], function(circular, testTemplate, circular2) { require(["./circular", "../templates/" + template, true ? "./circular" : "./circular"], function(circular, testTemplate, circular2) {
window.test(circular === 1, "AMD-style requires should work"); window.test(circular === 1, "AMD-style requires should work");
window.test(circular2 === 1, "AMD-style requires should work with conditionals"); window.test(circular2 === 1, "AMD-style requires should work with conditionals");
window.test(testTemplate === "test template", "AMD-style requires should work with context"); window.test(testTemplate === "test template", "AMD-style requires should work with context");
amdLoaded++; amdLoaded+=1;
}); });
define("name", ["./circular"], function(circular) { define("name", ["./circular"], function(circular) {
window.test(circular === 1, "AMD-style requires should work, in define"); window.test(circular === 1, "AMD-style requires should work, in define");
amdLoaded++; amdLoaded+=2;
}); });
define("name", [], function() { define("name", [], function() {
amdLoaded++; amdLoaded+=3;
}); });
define(["./circular"], function(circular) { define(["./circular"], function(circular) {
window.test(circular === 1, "AMD-style requires should work, in define without name"); window.test(circular === 1, "AMD-style requires should work, in define without name");
amdLoaded++; amdLoaded+=4;
}); });
define("blaa", function() { define("blaa", function() {
amdLoaded++; amdLoaded+=5;
}); });
var obj = {}; var obj = {};
define("blaaa", obj); define("blaaa", obj);
@ -193,17 +194,17 @@ define(function(require, exports, module) {
window.test(exports == _test_exports, "AMD-style define CommonJs: exports is correct"); window.test(exports == _test_exports, "AMD-style define CommonJs: exports is correct");
window.test(module == _test_module, "AMD-style define CommonJs: module is correct"); window.test(module == _test_module, "AMD-style define CommonJs: module is correct");
window.test(require("./circular") === 1, "AMD-style requires should work, in define without name and requires"); window.test(require("./circular") === 1, "AMD-style requires should work, in define without name and requires");
amdLoaded++; amdLoaded+=6;
}); });
require(["./circular"]); require(["./circular"]);
require(["./c"], function(c) { require(["./c"], function(c) {
window.test(c === "c", "AMD-style require should work, in chunk"); window.test(c === "c", "AMD-style require should work, in chunk");
window.test(require("./d") === "d", "AMD-style require should work, in chunk"); window.test(require("./d") === "d", "AMD-style require should work, in chunk");
amdLoaded++; amdLoaded+=7;
}); });
window.test(amdLoaded == 6, "AMD-style require should work (sync)"); window.test(amdLoaded == "123456", "AMD-style require should work (sync) "+amdLoaded);
setTimeout(function() { setTimeout(function() {
window.test(amdLoaded == 7, "AMD-style require should work (async)"); window.test(amdLoaded == "1234567", "AMD-style require should work (async) " + amdLoaded);
}, 1500); }, 1500);
// cross module system support // cross module system support

View File

@ -4,7 +4,7 @@
*/ */
var should = require("should"); var should = require("should");
var path = require("path"); var path = require("path");
require = require("enhanced-require")(__filename); require = require("enhanced-require")(module);
describe("polyfill", function() { describe("polyfill", function() {
describe("loader", function() { describe("loader", function() {