而不是相对require
代码,即从./
或..
开始,我想定义一个“全局”模块。例如,采用以下包结构:
/src
/index.js
/a.js
/b.js
/lib
/index.js
...
在src/a.js
或src/b.js
,要求lib
时,我每次都必须require('../lib')
。如果您需要手动解决../lib
或../../lib
或../../../lib
,那么当您开始更多嵌套时,这会很烦人。
我希望能够require('lib')
。我可以这样做吗?或者我应该使用全局变量?
答案 0 :(得分:0)
将模块放在node_modules中不要求您包含路径或相对路径
编辑:
如果在模块目录中放置名为package.json的文件,Node将尝试解析该文件并查找并使用main属性作为入口点的相对路径。例如,如果你的
./ myModuleDir /的package.json
文件看起来如下所示,Node将尝试使用路径加载文件
./ myModuleDir / LIB / myModule.js
{
"name" : "myModule",
"main" : "./lib/myModule.js"
}
如果该文件夹不包含名为package.json的包定义文件,则包入口点将采用index.js的默认值,在这种情况下,Node将查看路径下的文件./myModuleDir /index.js。
答案 1 :(得分:0)
使用非相对路径来获取源文件并不是节点需要的工作方式!不要试图通过在node_modules
目录中放置任意代码文件或通过更改NODE_PATH
环境变量来解决此问题。
如果要在没有路径的情况下使用require,则应将所需代码作为节点模块提取并依赖于此节点模块。这样可以实现更好的结构化代码,更简单的模块,封装的功能,更好的可测试性以及更轻松的代码重用。
您可以在http或git中包含软件包依赖项,因此不需要发布您在npm中使用的节点模块。请查看npm dependencies了解更多详情。
答案 2 :(得分:0)
在index.js文件中使用module.exports。并将其放在node_modules文件夹
中答案 3 :(得分:0)
如果相对路径惹恼了你并且你想在你的应用程序中使用lib,你可以像这样使用global
变量。
var lib = require('./lib');
global.lib = lib;
您可以在入口点将lib
设置为全局变量。之后,您只能访问lib
。
但它污染了全球范围。所以你必须小心使用。