节点需要路径引用问题

时间:2014-08-07 20:20:46

标签: javascript node.js require

我正在使用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 - 错误:找不到模块' ./ exercise / ex1 / FileOne.js'
  2. 尝试2 - 错误:找不到模块' FileOne.js'
  3. 尝试3 - 错误:找不到模块' /exercises/ex1/FileOne.js'
  4. 尝试4 - 即使我没想到...... FML
  5. 也有效

    所以最后一个工作但是所需的路径非常愚蠢。好像我的应用程序没有root的概念。我假设该节点认为我的根是ex1。但后来我希望尝试2能够奏效。我觉得我忽视了一些愚蠢的事情。

    问题:

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

    谢谢,

    约旦

2 个答案:

答案 0 :(得分:2)

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

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

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

您可以将FileOne引用为:

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

答案 1 :(得分:1)

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

  

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

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

它有点令人困惑,在答案链接中清楚地解释了。