如何知道要在Node中指定的路径

时间:2015-05-21 18:31:52

标签: node.js require

所有

当我使用Express.js时(但我相信这更像是一个Node问题),如果我想导入一些模块,我需要使用require(模块路径)。

但我有点困惑应该为每个需要使用什么根路径,它们是否都与我们执行node命令的路径相同?

有时候,当我使用require(“../ modelname”)时有效,有时需要(“./ modelname”),即使我没有更改modelname.js位置。

由于

4 个答案:

答案 0 :(得分:3)

节点文档提供了pseudo-code algorithm,了解它如何解析require()

的路径

总结一下:

require(X) from module at path Y
If X begins with './' or '/' or '../'
   a. LOAD_AS_FILE(Y + X)
   b. LOAD_AS_DIRECTORY(Y + X)

LOAD_AS_FILE(X)
1. If X is a file, load X as JavaScript text.  STOP
2. If X.js is a file, load X.js as JavaScript text.  STOP
3. If X.json is a file, parse X.json to a JavaScript Object.  STOP
4. If X.node is a file, load X.node as binary addon.  STOP

LOAD_AS_DIRECTORY(X)
1. If X/package.json is a file,
   a. Parse X/package.json, and look for "main" field.
   b. let M = X + (json main field)
   c. LOAD_AS_FILE(M)
2. If X/index.js is a file, load X/index.js as JavaScript text.  STOP
3. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP
4. If X/index.node is a file, load X/index.node as binary addon.  STOP

答案 1 :(得分:2)

如果您位于要访问modelname的目录中,则有以下两种情况

  1. 如果modelname位于同一目录中,则您可以使用require("./modelname")

  2. 如果调用目录与您的modelname目录不同且位于上一层,那么您必须使用require("../modelname")

答案 2 :(得分:1)

执行require( 'express' )时,节点将从当前文件夹开始,然后升级文件树,直到找到其中包含package.json的文件夹。

找到此文件后,它会检查node_modules文件夹并查找node_modules/express。然后,它将按照node_modules/express/package.json中有关如何包含模块的说明进行操作。

如果您想要自己的代码缺少package.json,请执行以下操作。

require( './router' )

require( '../middleware/site-data' )

在第一个示例中,.指的是执行导入的文件所在的文件夹,并将导入./router.js./router/index.js,具体取决于存在的位置。在require中,.被有效地翻译为__dirname + '/'

在第二个示例中,..指的是导入文件所在目录的父目录。在require中,..被有效地转换为__dirname + '/../'。< / p> 祝你好运!

答案 3 :(得分:0)

使用webstorm工具,你可以在eclipse中拥有调试工具,在调试模式下启动应用程序并放置断点。