所有
当我使用Express.js时(但我相信这更像是一个Node问题),如果我想导入一些模块,我需要使用require(模块路径)。
但我有点困惑应该为每个需要使用什么根路径,它们是否都与我们执行node命令的路径相同?
有时候,当我使用require(“../ modelname”)时有效,有时需要(“./ modelname”),即使我没有更改modelname.js位置。
由于
答案 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
的目录中,则有以下两种情况
如果modelname
位于同一目录中,则您可以使用require("./modelname")
如果调用目录与您的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中拥有调试工具,在调试模式下启动应用程序并放置断点。