2

我有一个带有目录的应用程序,这些目录中的文件通过require. 我可能会移动它们,所以我讨厌使用相对路径。有没有办法使用相对于我的应用程序根目录的路径?

我有

/home/robert/src/application/
  |\ routes
  |    \ foo.js
  |\ models
       \ bar.js
// foo.js
var bar = require('../models/bar')
  , stuff = require('../other_stuff/stuff');

我想

/home/robert/src/application/
  |\ routes
  |    \ foo.js
  |\ models
       \ bar.js
// foo.js
var bar = require('/models/bar')
  , stuff = require('/other_stuff/stuff');

除了路径被附加到/home/robert/src而不是自行评估之外。

4

3 回答 3

1

很多人已经开始创建一个index.js文件,从一个地方导出他们所有的模块。然后,模块只需要索引文件中的这些导出,而不是实际定义模块的位置。如果您移动任何东西,您只需要更新这个文件。此外,它还使得创建代码覆盖构建变得更加容易。

Index.js 只是以一堆这样的行结束:

module.exports.app = process.env.EXPRESS_COV ?
    require('./lib-cov/app') : require('./lib/app');

基本上,这app会根据变量使用标准模块或代码覆盖版本导出任何需要它的模块。

于 2012-04-29T05:28:01.713 回答
0

关于什么

require(__dirname + '/models/bar');

请参阅:http ://nodejs.org/docs/latest/api/globals.html#globals_dirname

于 2012-04-29T04:33:53.947 回答
0

将您的应用程序放入应用程序根目录中的一个文件夹(例如,./app),然后将此代码段包含到您的package.json

"scripts": {
  "postinstall": "ln -sf ../app ./node_modules"
}

并运行命令。app这会将文件夹软链接到您的 .Node 中node_modules,从而允许 Noderequire做它最擅长的事情。您将能够像这样要求您的模块:

require('app/routes/foo')

(Windows 用户需要手动完成;不确定它是否可以在 Windows 上运行。)

于 2014-10-29T06:29:16.433 回答