NodeJS所需模块在其他模块中不可用

我对NodeJS有点新鲜。 也许这只是它的工作方式,但可以肯定的是:

我的'index.js':

var fs = require('fs'); // do something with fs here var app = require('./app.js'); 

'app.js'

 fs.readFile('/somedir/somefile.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } console.log(data); }); 

然后我得到一个错误:

 ReferenceError: fs is not defined 

正如我读过的,这个“解决scheme”是在app.js中“重新需要”fs-module。 现在我明白的是fs模块被caching(任何模块,但是使用这个例子),所以Node仍然是非常快的。 我实际上并没有得到的是:“如果fs模块被caching了,那么它实际上还是有用的,为什么还要'重新需要'这个模块呢?

我会诚实的 这只是为了明白为什么。

每个文件都必须包含对模块的引用

index.js

 var fs = require("fs"), other = require("./otherfile"); // you can now use `fs` 

otherfile.js

 var fs = require("fs"); // you can now use `fs` here 

关于这一点的最好的部分之一是你不会locking在给定的文件中以某种方式命名variables。 每个文件都与lib中的所有其他文件相隔离,这是一件非常好的事情。

也知道如果你愿意的话,你可以只包含一个模块

 var read = require("fs").readFile; read("myfile.txt", function(err, data) { if (error) { return throw error; } console.log(data); }; 

说明:

Node.js不鼓励使用全局variables; 因此,您不应该尝试实施依赖于全局variables的事情。

当你再次调用fs模块的时候,它并不是真正的“重新需求”,而只是声明了一个指向caching模块的variables。


其他示例:

在这个答案中,我将详细介绍如何构造一个避免使用全局variables的简单应用程序。

我们可以忘记它,但是这是宣布它的根本:

 var fs = require('fs');