2

假设我运行了以下代码:

var toType = function(obj){
    return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
};
var someModule = require("./path/to/name");
console.log(toType(require.cache["./path/to/name"]));
someModule();

在位置 ./path/to/name.js 我有以下代码:

module.exports = function (){
    console.log("Hell World!");
};

这两个片段没有运行,所以我想我在这里遗漏了一些东西。输出如下:

node: no process found
undefined
Hell World!
[Finished in 0.1s]
  • 如何require("./path/to/name");映射到require.cache;
  • 如何检索模块、删除它并检查它的类型?

带有代码的答案将不胜感激。

4

1 回答 1

1

至少在节点 0.8.2 上对非系统导出运行以下命令:

var http = require ('http');
var util = require ('util');
var b = require('./b');

util.inspect(require.cache);

var loaded = require.cache;

注意 require.cache 是正确的;require.cache() 不是(它是一个属性;0.8.2 不会编译它。)为此我看到:

{ '/home/user/node/a.js':
   { id: '.',
     exports: {},
     parent: null,
     filename: '/home/user/node/a.js',
     loaded: false,
     children: [ [Object] ],
     paths:
      [ '/home/user/node/node_modules',
        '/home/user/node_modules',
        '/home/node_modules',
        '/node_modules' ] },
  '/home/user/node/b.js':
   { id: '/home/user/node/b.js',
     exports: [Function],
     parent:
      { id: '.',
        exports: {},
        parent: null,
        filename: '/home/user/node/a.js',
        loaded: false,
        children: [Object],
        paths: [Object] },
     filename: '/home/user/node/b.js',
     loaded: true,
     children: [],
     paths:
      [ '/home/user/node/node_modules',
        '/home/user/node_modules',
        '/home/node_modules',
        '/node_modules' ] } }

我不确定为什么像'http'这样的模块没有出现......

于 2012-08-17T21:51:47.433 回答