node.js - NodeJS 所需的模块在其他模块中不可用

标签 node.js module require

我对 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/

相关文章:

php - 在 CodeIgniter 中扩展 HMVC 模块

powershell - PowerShell 模块中的内部函数

javascript - 如何在 map 函数中使用 require() ?

python - 从 node.js 和 websockets 访问 IPython 命令行

node.js - 无法为连接配置文件 hlfv1 加载连接器模块 composer-connector-hlfv1

javascript - 如何测试呈现 View 的 Express Routes

node.js - 实时应用对 pod 代码源的更改 - npm

perl - 我使用什么 Perl 模块从 Windows 上的相对路径获取绝对路径(包括文件名)?

json - NodeJS开发生产环境配置文件加载

php - 将 PHP 文件存储在公共(public)目录之上并使用 require_once 加载它们是否安全?