From 638e82254aad3b68a14c6d2a13efaee31e3f00ab Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 23 Aug 2012 18:43:25 +0200 Subject: [PATCH] updates to enhanced-require, optimizing amd --- README.md | 2 +- buildin/__webpack_amd_define.js | 5 ++--- buildin/__webpack_amd_require.js | 33 ++++++++++++++----------------- lib/parse.js | 8 +++----- test/browsertest/lib/index.web.js | 23 ++++++++++----------- test/polyfills.js | 2 +- 6 files changed, 34 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 46622f50b..b1e53393a 100644 --- a/README.md +++ b/README.md @@ -238,7 +238,7 @@ var b = require("./b"); // and files // like in node.js // 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 require.ensure([], function(require) { diff --git a/buildin/__webpack_amd_define.js b/buildin/__webpack_amd_define.js index 120c71e71..718de0a2d 100644 --- a/buildin/__webpack_amd_define.js +++ b/buildin/__webpack_amd_define.js @@ -1,6 +1,5 @@ var amdRequire = require("./__webpack_amd_require"); -module.exports = function(module, req) { - req = amdRequire(req); +module.exports = function(module) { function define(id, dependencies, factory) { if(typeof id != "number") { factory = dependencies; @@ -9,7 +8,7 @@ module.exports = function(module, req) { } if(!factory) { factory = dependencies; - dependencies = [req, module.exports, module]; + dependencies = [amdRequire, module.exports, module]; } var result = typeof factory == "function" ? factory.apply(null, dependencies) : factory; if(result !== undefined) diff --git a/buildin/__webpack_amd_require.js b/buildin/__webpack_amd_require.js index 379f4af4e..58237880a 100644 --- a/buildin/__webpack_amd_require.js +++ b/buildin/__webpack_amd_require.js @@ -1,20 +1,17 @@ -function amdRequireFactory(req) { - function amdRequire(chunk, requiresFn, fn) { - if(!requiresFn) { - // commonjs - return req(chunk); - } - req.e(chunk, function() { - var modules = requiresFn(); - if(fn) - return fn.apply(null, modules); - }); +var req = require.valueOf(); +function amdRequire(chunk, requiresFn, fn) { + if(!requiresFn) { + // commonjs + return req(chunk); } - for(var name in req) - amdRequire[name] = req[name]; - amdRequire.amd = amdRequireFactory.amd; - amdRequire.config = function() {/* config is ignored, use webpack options */}; - return amdRequire; + req.e(chunk, function() { + var modules = requiresFn(); + if(fn) + return fn.apply(null, modules); + }); } -amdRequireFactory.amd = {}; -module.exports = amdRequireFactory; \ No newline at end of file +for(var name in req) + amdRequire[name] = req[name]; +amdRequire.amd = {}; +amdRequire.config = function() {/* config is ignored, use webpack options */}; +module.exports = amdRequire; diff --git a/lib/parse.js b/lib/parse.js index 2a68c30f5..72627482e 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -259,7 +259,6 @@ function walkExpression(context, expression) { context.requires = context.requires || []; context.requires.push({ name: "__webpack_amd_require", - append: "(require)", line: expression.callee.loc.start.line, column: expression.callee.loc.start.column, variable: "require" @@ -277,7 +276,6 @@ function walkExpression(context, expression) { context.requires = context.requires || []; context.requires.push({ name: "__webpack_amd_require", - append: "(require)", line: expression.callee.loc.start.line, column: expression.callee.loc.start.column, variable: "require" @@ -326,7 +324,7 @@ function walkExpression(context, expression) { context.requires = context.requires || []; context.requires.push({ name: "__webpack_amd_define", - append: "(module,require)", + append: "(module)", line: expression.callee.loc.start.line, column: expression.callee.loc.start.column, amdNameRange: amdNameRange, @@ -343,7 +341,7 @@ function walkExpression(context, expression) { expression.callee.name === "define") { context.requires.push({ name: "__webpack_amd_define", - append: "(module,require)", + append: "(module)", line: expression.callee.loc.start.line, column: expression.callee.loc.start.column, variable: "define" @@ -363,7 +361,7 @@ function walkExpression(context, expression) { context.requires = context.requires || []; context.requires.push({ name: "__webpack_amd_define", - append: "(module,require)", + append: "(module)", amdNameRange: expression.arguments[0].range, label: expression.arguments[0].value+"", line: expression.callee.loc.start.line, diff --git a/test/browsertest/lib/index.web.js b/test/browsertest/lib/index.web.js index 0f2f259eb..ff59f1c13 100644 --- a/test/browsertest/lib/index.web.js +++ b/test/browsertest/lib/index.web.js @@ -1,5 +1,6 @@ // 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"); require("script!../js/libary1.js"); @@ -161,26 +162,26 @@ window.test(require("./singluar2") !== singlarObj, "require.cache can be deleted // AMD var template = "tmpl"; -var amdLoaded = 0; +var amdLoaded = ""; require(["./circular", "../templates/" + template, true ? "./circular" : "./circular"], function(circular, testTemplate, circular2) { window.test(circular === 1, "AMD-style requires should work"); window.test(circular2 === 1, "AMD-style requires should work with conditionals"); window.test(testTemplate === "test template", "AMD-style requires should work with context"); - amdLoaded++; + amdLoaded+=1; }); define("name", ["./circular"], function(circular) { window.test(circular === 1, "AMD-style requires should work, in define"); - amdLoaded++; + amdLoaded+=2; }); define("name", [], function() { - amdLoaded++; + amdLoaded+=3; }); define(["./circular"], function(circular) { window.test(circular === 1, "AMD-style requires should work, in define without name"); - amdLoaded++; + amdLoaded+=4; }); define("blaa", function() { - amdLoaded++; + amdLoaded+=5; }); var 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(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"); - amdLoaded++; + amdLoaded+=6; }); require(["./circular"]); require(["./c"], function(c) { window.test(c === "c", "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() { - window.test(amdLoaded == 7, "AMD-style require should work (async)"); + window.test(amdLoaded == "1234567", "AMD-style require should work (async) " + amdLoaded); }, 1500); // cross module system support diff --git a/test/polyfills.js b/test/polyfills.js index a54584bbf..b8041634b 100644 --- a/test/polyfills.js +++ b/test/polyfills.js @@ -4,7 +4,7 @@ */ var should = require("should"); var path = require("path"); -require = require("enhanced-require")(__filename); +require = require("enhanced-require")(module); describe("polyfill", function() { describe("loader", function() {