节点需要path引用问题
我正在使用节点来运行一些JS任务。 我正在使用node require来包含我写的其他需要的文件。 我想包括的文件存在于同一个目录中。 这些文件没有什么特别之处。 只是普通的旧JavaScript。 我没有把内容提供给浏览器或任何东西。 我只是想运行JS的逻辑。
我的目录结构:
- 根
- 演习
- EX1
- FileLoader.js
- FileOne.js
- EX1
- 演习
在我的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 – 错误:找不到模块'./exercises/ex1/FileOne.js'
- 尝试2 – 错误:无法find模块“FileOne.js”
- 尝试3 – 错误:找不到模块'/exercises/ex1/FileOne.js'
- 尝试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。
这有点令人困惑,在答案中有明确的解释。