我对 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
正如我所读到的,对此的“解决方案”是“重新要求”app.js 中的 fs 模块。现在我所理解的是 fs-module 被缓存(任何模块,但使用示例),因此 Node 仍然会非常快。我并没有真正得到的是:“如果 fs 模块被缓存了,那么实际上它还是有点可用的,为什么我仍然需要‘重新要求’模块?
我会说实话;这只是为了了解原因。
最佳答案
每个文件都必须包含对模块的引用
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
这方面最好的部分之一是您不会被锁定在任何给定文件中以某种方式命名变量。每个文件都与您的库中的所有其他文件几乎隔离,这是一件非常的好事。
如果您愿意,也可以只包含模块的一部分
var read = require("fs").readFile;
read("myfile.txt", function(err, data) {
if (error) {
return throw error;
}
console.log(data);
};
说明:
Node.js 不鼓励使用全局变量;因此,您不应该尝试实现依赖于全局变量的东西。
当您再次调用 fs
模块时,实际上并没有“重新要求”它,而只是声明了一个指向缓存模块的变量。
其他示例:
在 this answer我将详细介绍如何构建一个避免使用全局变量的简单应用程序。
关于node.js - NodeJS 所需的模块在其他模块中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470689/