【问题标题】:NodeJS required module not available in other modulesNode JS require 模块在其他模块中不可用
【发布时间】:2013-08-30 12:15:22
【问题描述】:

我对 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-module 被缓存了,那么实际上它还是有点可用的,为什么我仍然必须'重新要求'该模块?

我会说实话;这只是为了了解原因。

【问题讨论】:

    标签: node.js module require


    【解决方案1】:

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

    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 中,我详细介绍了如何构建一个避免使用全局变量的简单应用程序。

    【讨论】:

      【解决方案2】:

      有时我们可以忘记它,但声明它是基本的:

      var fs = require('fs');
      

      【讨论】:

        猜你喜欢
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多