这个问题在这里已有答案:
我心中有一个愚蠢的问题:require("moduleName")
是如何工作的?
我明白,如果我的项目中有一个文件moduleA.js
,我可以使用require("./moduleA")
加载模块。但对于许多“知名库”,如express,lodash等,我不需要显式地写出库所在的相对路径。相反,我只使用模块名称(例如require('lodash');
)。我的问题是:这是如何工作的?如何以这种方式使我自己的模块工作,其中模块可以全局加载而无需编写路径(例如.require('moduleA')
)。
谢谢
使用NPM安装库时,库将安装在名为node_modules
的文件夹中,当您创建require
关键字时,节点将查找该文件夹中的包名称。当您需要js文件时,应指定其路径。
像require('./moduleA')
这样的相对路径意味着您要在项目中导入脚本或模块。像require('loadash')
这样的“众所周知的”路径意味着您要导入外部依赖项,可以在C:/path/to/project/node_modules/lodash
下本地安装到您的项目,也可以全局安装到您的帐户或计算机,具体取决于您在安装Node.js时配置npm
的方式。那条路可能就像C:/Users/yourname/AppData/Roaming/npm/node_modules/lodash
那样。
如果您在npm上发布模块,其他人将能够将其作为外部依赖项和require()
安装,而无需指定它的相对路径。