有没有办法取消 node.js 对 require 模块的缓存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法取消 node.js 对 require 模块的缓存相关的知识,希望对你有一定的参考价值。
参考技术A require是nodejs根据commonjs的模块规则所产生的,而nodejs之所以能成为服务端语言的重要原因就是克服了js原有的模块机制缺失,
所以require是必需的。那如何清除缓存呢?
delete require.cache[require.resolve('你require的那个')];
即可
Node.js "require" 函数和参数
【中文标题】Node.js "require" 函数和参数【英文标题】:Node.js "require" function and parameters 【发布时间】:2011-11-14 03:14:03 【问题描述】:当我这样做时:
lib = require('lib.js')(app)
app
真的被传入了吗?
在 lib.js 中:
exports = module.exports = function(app)
似乎没有,因为当我尝试做的不仅仅是(app)
而是做:
lib = require('lib.js')(app, param2)
还有:
exports = module.exports = function(app, param2)
我没有收到params2
。
我尝试通过以下方式进行调试:
params =
params.app = app
params.param2 = "test"
lib = require("lib.js")(params)
但在 lib.js 中,当我尝试 JSON.stringify
时出现此错误:
"DEBUG: TypeError: Converting circular structure to JSON"
【问题讨论】:
你传入的变量是什么?是否已声明和定义? 你发现了吗?可能是您描述中的拼写错误。 “参数?2” 【参考方案1】:当您拨打lib = require("lib.js")(params)
时
您实际上是使用一个参数调用lib.js
,其中包含两个属性名称app
和param2
你要么想要
// somefile
require("lib.js")(params);
// lib.js
module.exports = function(options)
var app = options.app;
var param2 = options.param2;
;
或
// somefile
require("lib.js")(app, param2)
// lib.js
module.exports = function(app, param2)
【讨论】:
+1 用于回答 OP 在我的回答后添加的部分:\ @JimSchubert 对不起舒伯特先生 :( 然后从我的 nodejs 代码中实际导出我有module.exports = function(options) ....; return fn1, fn2 ;
虽然有更好的方法吗?【参考方案2】:
您可能有一个未定义的值试图传入。
例如,requires.js
:
module.exports = exports = function()
console.log('arguments: %j\n', arguments);
;
当你正确调用它时,它会起作用:
node
> var requires = require('./requires')(0,1,2,3,4,5);
arguments: "0":0,"1":1,"2":2,"3":3,"4":4,"5":5
如果出现语法错误,则失败:
> var requires = require('./requires')(0,);
... var requires = require('./requires')(0,2);
...
如果你有一个未定义的对象,它就不起作用:
> var requires = require('./requires')(0, undefined);
arguments: "0":0
所以,我首先检查您的对象是否定义正确(并且在您传入时拼写正确),然后检查您是否有语法错误。
【讨论】:
谢谢。我的错误是我忘记更改其中一个调用的参数数量。 现在我明白了它是如何工作的。我剩下的问题现在是关于 JSON 错误的。大多数人只是通过浏览器进行调试吗? 据我所知,大多数人使用util.inspect
来检查对象(这是在内部使用console.log
完成的)。您还可以使用节点检查器(请参阅 article 视频教程)。 node-inspector 是监听 node --debug
的 webkit 检查器(如 Chrome 中的 CTRL+SHIFT+J)。
@SohailSi 这是一种防止任何程序错误的方法(例如,如果有人将新对象绑定到exports
和module.exports
)。有关详细信息,请参阅***.com/a/13622513/151445。
感谢@JimSchubert 的教育评论。以上是关于有没有办法取消 node.js 对 require 模块的缓存的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法取消 node.js 对 require 模块的缓存
有没有办法从 .js 文件自动安装 node.js 依赖项?
使用 Express/Node.js 和 Angular 处理取消的请求