5

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

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

当在src/a.jsorsrc/b.js中时,要求lib,我require('../lib')每次都必须这样做。当您开始嵌套更多时,这会变得很烦人,因为您必须手动解析../libor../../lib../../../lib

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

4

4 回答 4

0

在 index.js 文件中使用 module.exports 。并将其放在 node_modules 文件夹中

于 2013-05-17T06:28:04.430 回答
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。

于 2013-05-17T05:30:17.010 回答
0

使用非相对路径来要求您的源文件并不是节点要求的工作方式!不要试图通过在node_modules目录中放置任意代码文件或通过更改NODE_PATH环境变量来解决此限制。

如果您想在没有路径的情况下使用 require,您应该将所需的代码提取为节点模块并依赖于此节点模块。这导致更好的结构化代码、更少复杂的模块、封装的功能、更好的可测试性和更容易的代码重用。

您可以包含来自 http 或 git 的包依赖项,因此无需发布您在 npm 中使用的节点模块。查看npm 依赖项以获取更多详细信息。

于 2013-05-17T06:12:35.070 回答
0

如果相对路径惹恼了你并且你想在你的应用程序中总是使用 lib,你可以使用global这样的变量。

var lib = require('./lib');
global.lib = lib;

您可以lib在入口点设置为全局变量。之后你就可以访问了lib。但它污染了全球范围。所以你必须小心使用。

于 2013-05-17T06:55:29.157 回答