mirror of https://github.com/webpack/webpack.git
expose require.cache and require.resolve, fixes #4
This commit is contained in:
parent
b1a45f3341
commit
3b219e34af
37
lib/parse.js
37
lib/parse.js
|
@ -194,6 +194,7 @@ function walkExpression(context, expression) {
|
||||||
expression.arguments.length == 1 &&
|
expression.arguments.length == 1 &&
|
||||||
expression.callee.type === "Identifier" &&
|
expression.callee.type === "Identifier" &&
|
||||||
expression.callee.name === "require") {
|
expression.callee.name === "require") {
|
||||||
|
// "require(...)"
|
||||||
var param = parseCalculatedString(expression.arguments[0]);
|
var param = parseCalculatedString(expression.arguments[0]);
|
||||||
if(param.conditional) {
|
if(param.conditional) {
|
||||||
context.requires = context.requires || [];
|
context.requires = context.requires || [];
|
||||||
|
@ -252,6 +253,7 @@ function walkExpression(context, expression) {
|
||||||
expression.callee.object.name === "require" &&
|
expression.callee.object.name === "require" &&
|
||||||
expression.callee.property.type === "Identifier" &&
|
expression.callee.property.type === "Identifier" &&
|
||||||
{async:1, ensure:1}.hasOwnProperty(expression.callee.property.name)) {
|
{async:1, ensure:1}.hasOwnProperty(expression.callee.property.name)) {
|
||||||
|
// "require.ensure(...)" or "require.async(...)"
|
||||||
var param = parseStringArray(expression.arguments[0]);
|
var param = parseStringArray(expression.arguments[0]);
|
||||||
var newContext = {
|
var newContext = {
|
||||||
requires: [],
|
requires: [],
|
||||||
|
@ -292,6 +294,7 @@ function walkExpression(context, expression) {
|
||||||
expression.callee.object.name === "require" &&
|
expression.callee.object.name === "require" &&
|
||||||
expression.callee.property.type === "Identifier" &&
|
expression.callee.property.type === "Identifier" &&
|
||||||
expression.callee.property.name === "context") {
|
expression.callee.property.name === "context") {
|
||||||
|
// "require.context(...)"
|
||||||
var param = parseString(expression.arguments[0]);
|
var param = parseString(expression.arguments[0]);
|
||||||
context.contexts = context.contexts || [];
|
context.contexts = context.contexts || [];
|
||||||
var newContext = {
|
var newContext = {
|
||||||
|
@ -304,12 +307,37 @@ function walkExpression(context, expression) {
|
||||||
noCallee = true;
|
noCallee = true;
|
||||||
}
|
}
|
||||||
if(context.overwrite.indexOf("require") === -1 &&
|
if(context.overwrite.indexOf("require") === -1 &&
|
||||||
expression.callee &&
|
expression.callee && expression.arguments &&
|
||||||
|
expression.arguments.length == 1 &&
|
||||||
expression.callee.type === "MemberExpression" &&
|
expression.callee.type === "MemberExpression" &&
|
||||||
expression.callee.object.type === "Identifier" &&
|
expression.callee.object.type === "Identifier" &&
|
||||||
expression.callee.object.name === "require" &&
|
expression.callee.object.name === "require" &&
|
||||||
expression.callee.property.type === "Identifier" &&
|
expression.callee.property.type === "Identifier" &&
|
||||||
expression.callee.property.name === "valueOf") {
|
expression.callee.property.name === "resolve") {
|
||||||
|
// "require.resolve(...)"
|
||||||
|
var param = parseCalculatedString(expression.arguments[0]);
|
||||||
|
if(param.conditional) {
|
||||||
|
context.requires = context.requires || [];
|
||||||
|
param.conditional.forEach(function(paramItem, idx) {
|
||||||
|
context.requires.push({
|
||||||
|
name: paramItem.value,
|
||||||
|
valueRange: paramItem.range,
|
||||||
|
deleteRange: idx === 0 ? expression.callee.range : undefined,
|
||||||
|
line: expression.loc.start.line,
|
||||||
|
column: expression.loc.start.column
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// normal require
|
||||||
|
context.requires = context.requires || [];
|
||||||
|
context.requires.push({
|
||||||
|
name: param.value,
|
||||||
|
expressionRange: [expression.callee.range[0], expression.range[1]],
|
||||||
|
idOnly: true,
|
||||||
|
line: expression.loc.start.line,
|
||||||
|
column: expression.loc.start.column
|
||||||
|
});
|
||||||
|
}
|
||||||
noCallee = true;
|
noCallee = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,6 +352,11 @@ function walkExpression(context, expression) {
|
||||||
expression.property.type === "Identifier" &&
|
expression.property.type === "Identifier" &&
|
||||||
expression.property.name === "exports")
|
expression.property.name === "exports")
|
||||||
break;
|
break;
|
||||||
|
if(expression.object.type === "Identifier" &&
|
||||||
|
expression.object.name === "require" &&
|
||||||
|
expression.property.type === "Identifier" &&
|
||||||
|
{valueOf:1, cache:1, modules:1}.hasOwnProperty(expression.property.name))
|
||||||
|
break;
|
||||||
walkExpression(context, expression.object);
|
walkExpression(context, expression.object);
|
||||||
if(expression.property.type !== "Identifier")
|
if(expression.property.type !== "Identifier")
|
||||||
walkExpression(context, expression.property);
|
walkExpression(context, expression.property);
|
||||||
|
|
|
@ -42,7 +42,7 @@ module.exports = function(module, options, toRealId, toRealChuckId) {
|
||||||
replaces.push({
|
replaces.push({
|
||||||
from: requireItem.expressionRange[0],
|
from: requireItem.expressionRange[0],
|
||||||
to: requireItem.expressionRange[1],
|
to: requireItem.expressionRange[1],
|
||||||
value: "require(" + prefix + toRealId(requireItem.id) + ")" + (requireItem.append || "")
|
value: (requireItem.idOnly ? "" : "require") + "(" + prefix + toRealId(requireItem.id) + ")" + (requireItem.append || "")
|
||||||
});
|
});
|
||||||
} else if(requireItem.valueRange) {
|
} else if(requireItem.valueRange) {
|
||||||
replaces.push({
|
replaces.push({
|
||||||
|
@ -50,6 +50,13 @@ module.exports = function(module, options, toRealId, toRealChuckId) {
|
||||||
to: requireItem.valueRange[1],
|
to: requireItem.valueRange[1],
|
||||||
value: prefix + toRealId(requireItem.id)
|
value: prefix + toRealId(requireItem.id)
|
||||||
});
|
});
|
||||||
|
if(requireItem.deleteRange) {
|
||||||
|
replaces.push({
|
||||||
|
from: requireItem.deleteRange[0],
|
||||||
|
to: requireItem.deleteRange[1],
|
||||||
|
value: ""
|
||||||
|
});
|
||||||
|
}
|
||||||
} else if(requireItem.variable) {
|
} else if(requireItem.variable) {
|
||||||
if(!freeVars[requireItem.variable]) {
|
if(!freeVars[requireItem.variable]) {
|
||||||
freeVars[requireItem.variable] = requireItem;
|
freeVars[requireItem.variable] = requireItem;
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
/******/ }
|
/******/ }
|
||||||
/******/ };
|
/******/ };
|
||||||
/******/ require.modules = modules;
|
/******/ require.modules = modules;
|
||||||
|
/******/ require.cache = installedModules;
|
||||||
/******/ window[modules.b] = function(chunkId, moreModules) {
|
/******/ window[modules.b] = function(chunkId, moreModules) {
|
||||||
/******/ for(var moduleId in moreModules)
|
/******/ for(var moduleId in moreModules)
|
||||||
/******/ modules[moduleId] = moreModules[moduleId];
|
/******/ modules[moduleId] = moreModules[moduleId];
|
||||||
|
|
|
@ -14,5 +14,6 @@
|
||||||
/******/ callback(require);
|
/******/ callback(require);
|
||||||
/******/ };
|
/******/ };
|
||||||
/******/ require.modules = modules;
|
/******/ require.modules = modules;
|
||||||
|
/******/ require.cache = installedModules;
|
||||||
/******/ return require(0);
|
/******/ return require(0);
|
||||||
/******/})
|
/******/})
|
||||||
|
|
|
@ -146,6 +146,16 @@ var abc = "abc", scr = "script.coffee";
|
||||||
window.test(require("../resources/" + scr) === "coffee test", "context should process extensions");
|
window.test(require("../resources/" + scr) === "coffee test", "context should process extensions");
|
||||||
window.test(require("raw!../resources/" + abc + ".txt") === "abc", "raw loader with context");
|
window.test(require("raw!../resources/" + abc + ".txt") === "abc", "raw loader with context");
|
||||||
|
|
||||||
|
// require behavior
|
||||||
|
var singlarObj = require("./singluar2");
|
||||||
|
var singlarId = require.resolve("./singluar2");
|
||||||
|
var singlarIdInConditional = require.resolve(true ? "./singluar2" : "./singluar");
|
||||||
|
window.test(typeof singlarId == "number", "require.resolve returns a id");
|
||||||
|
window.test(singlarIdInConditional === singlarId, "require.resolve returns a id if in conditional");
|
||||||
|
window.test(typeof require.cache[singlarId] == "object", "require.cache can be read");
|
||||||
|
delete require.cache[singlarId];
|
||||||
|
window.test(require("./singluar2") !== singlarObj, "require.cache can be deleted");
|
||||||
|
|
||||||
|
|
||||||
// Tests from node.js
|
// Tests from node.js
|
||||||
require("bundle!../nodetests");
|
require("bundle!../nodetests");
|
||||||
|
|
Loading…
Reference in New Issue