【问题标题】:Node require path reference issue节点需要路径引用问题
【发布时间】:2014-08-07 20:20:46
【问题描述】:

我正在使用 node 来运行一些 JS 任务。我正在使用 node require 来包含我编写的其他需要的文件。我试图包含的文件存在于同一目录中。这些文件没有什么特别之处;只是普通的旧 JavaScript。我没有将内容提供给浏览器或任何东西。我只是想运行 JS 逻辑。

我的目录结构:

    • 练习
      • ex1
        • FileLoader.js
        • FileOne.js

在我的 FileLoader.js 中,我自己运行了这些文件路径模式中的每一个。它们按照我的尝试顺序。

require('./exercises/ex1/FileOne.js'); // Attempt 1 path
require('FileOne.js'); // Attempt 2 path
require('/exercises/ex1/FileOne.js'); // Attempt 3 path
require('../../exercises/ex1/FileOne.js'); // Attempt 4 path

终端命令:

node ./exercises/ex1/ex1.js

结果:

  1. 尝试 1 - 错误:找不到模块 './exercises/ex1/FileOne.js'
  2. 尝试 2 - 错误:找不到模块“FileOne.js”
  3. 尝试 3 - 错误:找不到模块“/exercises/ex1/FileOne.js”
  4. 尝试 4 - 即使我没想到它也成功了.... FML

所以最后一个有效,但所需的路径非常愚蠢。似乎我的应用程序没有根的概念。我假设那个节点认为我的根是 ex1。但是我希望尝试 2 能够奏效。我觉得我忽略了一些愚蠢的事情。

问题:

  • 在 require 中使用文件路径的正确方法是什么?
  • 有没有办法用node设置根目录?

谢谢,

约旦

【问题讨论】:

  • 我认为正确的语法应该是require("./FileOne.js");...
  • UGG。你想把它作为答案吗?那么我可以给你信用。
  • 为了将来使用,这个链接解释了 node.js 如何搜索需求:nodejs.org/api/…

标签: javascript node.js require


【解决方案1】:

正确的语法是require("./FileOne.js")。如果文件放置在节点路径中,则第二种形式 (require('FileOne.js');) 将起作用。

要设置节点根,您可以使用NODE_PATH。例如,使用

NODE_PATH=/path/to/your/project/root node ex1.js

您可以将 FileOne 引用为:

require("exercises/ex1/FileOne.js");

【讨论】:

    【解决方案2】:

    还可以考虑使用__dirname。检查this answer 以获得更好的洞察力。有时引用可能取决于在处理 fs 之类的模块时调用 node 命令以启动应用程序的位置。所以__dirname 是一个安全的选择。

    在 Node.js 中,__dirname 始终是当前正在执行的脚本所在的目录(参见此处)。换句话说,使用 __dirname 的脚本的目录。

    相比之下,.为您提供在终端窗口中运行 node 命令的目录(即您的工作目录)。例外是当您使用 .使用 require(),在这种情况下,它的作用类似于 __dirname。

    这有点令人困惑,在链接的答案中解释得很清楚。

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 2010-12-01
      • 2014-03-06
      相关资源
      最近更新 更多