我可以问“需要”从我的应用程序根目录search模块吗?
我有一个应用程序与目录,并在这些目录中的文件通过require
相互引用。 我可能会移动它们,所以我讨厌使用相对path。 有没有办法使用相对于我的应用程序根的path?
我有
/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');
除了path被附加到/home/robert/src
而不是自己评估之外。
很多人已经开始创build一个index.js
文件,从一个地方导出所有的模块。 然后,模块只需要索引文件中的这些导出,而不是实际定义模块的位置。 如果你移动任何东西,你只需要更新这个文件。 此外,它使创build代码覆盖更容易。
Index.js只是像这样一堆行:
module.exports.app = process.env.EXPRESS_COV ? require('./lib-cov/app') : require('./lib/app');
基本上这个导出app
的任何模块需要它使用标准模块或代码覆盖版本取决于一个variables。
关于什么
require(__dirname + '/models/bar');
请参阅: http : //nodejs.org/docs/latest/api/globals.html#globals_dirname
把你的应用程序放入应用程序根目录下的一个文件夹(比如./app
),然后将这个片段包含到你的package.json
:
"scripts": { "postinstall": "ln -sf ../app ./node_modules" }
并运行命令。 这将软件链接到您的node_modules
的app
文件夹,允许节点,并require
做的最好。 你将能够像这样需要你的模块:
require('app/routes/foo')
(Windows用户需要手动执行;不确定它是否可以在Windows上运行。)