如何在node.js中将文件定义为模块

时间:2013-05-17 05:20:02

标签: node.js

而不是相对require代码,即从./..开始,我想定义一个“全局”模块。例如,采用以下包结构:

/src
  /index.js
  /a.js
  /b.js
/lib
  /index.js
  ...

src/a.jssrc/b.js,要求lib时,我每次都必须require('../lib')。如果您需要手动解决../lib../../lib../../../lib,那么当您开始更多嵌套时,这会很烦人。

我希望能够require('lib')。我可以这样做吗?或者我应该使用全局变量?

4 个答案:

答案 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。 但它污染了全球范围。所以你必须小心使用。