我喜欢为共享代码创建一个新的node_modules文件夹,然后让Node.js和'require'发挥它们最擅长的作用。
例如:
- node_modules // => these are loaded from your *package.json* file
- app
- node_modules // => add node-style modules
- helper.js
- models
- user
- car
- package.json
- .gitignore
例如,如果您在car/index.js
中,您可以require('helper')
,Node.js会找到它!
Node.js具有一种聪明的算法来解析模块,这是与竞争对手平台不同的。
如果您从/beep/boop/bar.js
中require('./foo.js')
,Node.js将在/beep/boop/foo.js
中查找./foo.js
。以./
或../
开头的路径始终是相对于调用require()
的文件而言的本地路径。
但是,如果您从/beep/boop/foo.js
中'require'一个非相对名称,例如require('xyz')
,Node.js按顺序搜索这些路径,在第一个匹配项停止,并在未找到任何内容时引发错误:
/beep/boop/node_modules/xyz
/beep/node_modules/xyz
/node_modules/xyz
每个存在的xyz
目录,Node.js将首先查找xyz/package.json
文件以查看是否存在"main"
字段。 "main"
字段定义了在使用require()
函数请求该目录路径时应该加载哪个文件。
例如,如果/beep/node_modules/xyz
是第一个匹配项,并且/beep/node_modules/xyz/package.json
中有:
{
"name": "xyz",
"version": "1.2.3",
"main": "lib/abc.js"
}
那么来自/beep/node_modules/xyz/lib/abc.js
的导出将被require('xyz')
返回。
如果没有package.json
或没有"main"
字段,则假定使用index.js
:
/beep/node_modules/xyz/index.js