我有一个带目录的应用程序,这些目录中的文件通过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
而不是自己评估。
答案 0 :(得分:1)
很多人已经开始创建一个index.js
文件,可以从一个地方导出所有模块。然后,模块只需要从索引文件中导出这些导出,而不是实际定义模块的位置。如果你移动任何东西,你只需要更新这个文件。此外,它还可以更轻松地创建代码覆盖率。
Index.js最终会出现一堆这样的行:
module.exports.app = process.env.EXPRESS_COV ?
require('./lib-cov/app') : require('./lib/app');
基本上,根据变量,使用标准模块或代码覆盖率版本为任何需要它的模块导出app
。
答案 1 :(得分:0)
怎么样?
require(__dirname + '/models/bar');
请参阅:http://nodejs.org/docs/latest/api/globals.html#globals_dirname
答案 2 :(得分:0)
将您的应用程序放入应用程序根目录中的一个文件夹(例如./app
),然后将此代码段包含在package.json
中:
"scripts": {
"postinstall": "ln -sf ../app ./node_modules"
}
然后运行命令。这会将app
文件夹软链接到您的node_modules
,允许节点和require
执行其最擅长的操作。您可以像这样要求您的模块:
require('app/routes/foo')
(Windows用户需要手动执行;不确定它是否可以在Windows上运行。)