节点需要路径引用问题

Node require path reference issue

本文关键字:引用 问题 路径 节点      更新时间:2023-09-26

我使用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("./FileOne.js")。如果文件放置在节点路径中,第二种形式(require('FileOne.js');)可以工作。

通过NODE_PATH设置节点root。例如,使用

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

你可以引用FileOne为:

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

也可以考虑使用__dirname。看看这个答案,你会有更好的理解。有时引用可能取决于在处理fs等模块时调用node命令来启动应用程序的位置。因此,__dirname将是一个安全的选择。

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

的脚本的目录

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

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