节点需要path引用问题

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

我的目录结构:

    • 演习
      • EX1
        • FileLoader.js
        • FileOne.js

在我的FileLoader.js中,我自己运行了这些文件path模式中的每一个。 他们是在我的企图顺序。

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 

terminal命令:

 node ./exercises/ex1/ex1.js 

成果:

  1. 尝试1 – 错误:找不到模块'./exercises/ex1/FileOne.js'
  2. 尝试2 – 错误:无法find模块“FileOne.js”
  3. 尝试3 – 错误:找不到模块'/exercises/ex1/FileOne.js'
  4. 尝试4 – 它的工作,即使我没有想到…. FML

所以最后一个工作,但所需的path是非常愚蠢的。 这似乎是我的应用程序没有根的概念。 我假设节点认为我的根是ex1。 但是,我期望尝试2工作。 我觉得我正在俯视一些愚蠢的事情。

题:

  • 使用require的文件path的正确方法是什么?
  • 有没有一种方法来设置节点的根目录?

谢谢,

约旦

正确的语法是require("./FileOne.js") 。 如果文件放在节点path中,第二种forms( require('FileOne.js'); )将工作。

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

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

你可以参考FileOne:

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

另外考虑使用__dirname 。 检查这个答案更好的见解。 有时引用可能取决于在处理像fs这样的模块时从哪里调用node命令来启动应用程序。 所以__dirname将是一个安全的select使用。

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

相比之下, 。 为您提供在terminal窗口中运行node命令的目录(即工作目录)。 例外是当你使用。 与require(),在这种情况下,它的行为就像__dirname。

这有点令人困惑,在答案中有明确的解释。