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.callee.type === "Identifier" &&
|
||||
expression.callee.name === "require") {
|
||||
// "require(...)"
|
||||
var param = parseCalculatedString(expression.arguments[0]);
|
||||
if(param.conditional) {
|
||||
context.requires = context.requires || [];
|
||||
|
@ -252,6 +253,7 @@ function walkExpression(context, expression) {
|
|||
expression.callee.object.name === "require" &&
|
||||
expression.callee.property.type === "Identifier" &&
|
||||
{async:1, ensure:1}.hasOwnProperty(expression.callee.property.name)) {
|
||||
// "require.ensure(...)" or "require.async(...)"
|
||||
var param = parseStringArray(expression.arguments[0]);
|
||||
var newContext = {
|
||||
requires: [],
|
||||
|
@ -292,6 +294,7 @@ function walkExpression(context, expression) {
|
|||
expression.callee.object.name === "require" &&
|
||||
expression.callee.property.type === "Identifier" &&
|
||||
expression.callee.property.name === "context") {
|
||||
// "require.context(...)"
|
||||
var param = parseString(expression.arguments[0]);
|
||||
context.contexts = context.contexts || [];
|
||||
var newContext = {
|
||||
|
@ -304,12 +307,37 @@ function walkExpression(context, expression) {
|
|||
noCallee = true;
|
||||
}
|
||||
if(context.overwrite.indexOf("require") === -1 &&
|
||||
expression.callee &&
|
||||
expression.callee && expression.arguments &&
|
||||
expression.arguments.length == 1 &&
|
||||
expression.callee.type === "MemberExpression" &&
|
||||
expression.callee.object.type === "Identifier" &&
|
||||
expression.callee.object.name === "require" &&
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -324,6 +352,11 @@ function walkExpression(context, expression) {
|
|||
expression.property.type === "Identifier" &&
|
||||
expression.property.name === "exports")
|
||||
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);
|
||||
if(expression.property.type !== "Identifier")
|
||||
walkExpression(context, expression.property);
|
||||
|
|
|
@ -42,7 +42,7 @@ module.exports = function(module, options, toRealId, toRealChuckId) {
|
|||
replaces.push({
|
||||
from: requireItem.expressionRange[0],
|
||||
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) {
|
||||
replaces.push({
|
||||
|
@ -50,6 +50,13 @@ module.exports = function(module, options, toRealId, toRealChuckId) {
|
|||
to: requireItem.valueRange[1],
|
||||
value: prefix + toRealId(requireItem.id)
|
||||
});
|
||||
if(requireItem.deleteRange) {
|
||||
replaces.push({
|
||||
from: requireItem.deleteRange[0],
|
||||
to: requireItem.deleteRange[1],
|
||||
value: ""
|
||||
});
|
||||
}
|
||||
} else if(requireItem.variable) {
|
||||
if(!freeVars[requireItem.variable]) {
|
||||
freeVars[requireItem.variable] = requireItem;
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
/******/ }
|
||||
/******/ };
|
||||
/******/ require.modules = modules;
|
||||
/******/ require.cache = installedModules;
|
||||
/******/ window[modules.b] = function(chunkId, moreModules) {
|
||||
/******/ for(var moduleId in moreModules)
|
||||
/******/ modules[moduleId] = moreModules[moduleId];
|
||||
|
|
|
@ -14,5 +14,6 @@
|
|||
/******/ callback(require);
|
||||
/******/ };
|
||||
/******/ require.modules = modules;
|
||||
/******/ require.cache = installedModules;
|
||||
/******/ 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("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
|
||||
require("bundle!../nodetests");
|
||||
|
|
Loading…
Reference in New Issue