我更喜欢导入依赖项,而不需要像../../../foo/bar
那样的大量相关文件系统导航。
在前端,我传统上使用RequireJS配置默认基本路径,该路径启用“绝对”路径,例如myapp/foo/bar
。
如何在Node.js中实现这一目标?
答案 0 :(得分:1)
您可以使用require.main.require
,它始终是起始文件的模块路径。见https://nodejs.org/api/modules.html#modules_accessing_the_main_module
这意味着,当你运行时
const x = require.main.require('some/file/path/y')
它需要它基于起始文件的基本路径(被调用,node app.js
表示app.js文件)。
其他选项包括使用process.cwd()
来获取应用的起始路径,但这取决于您调用节点进程的位置,而不是文件的位置。意思是,node app.js
与您在一级上升node src/app.js
时不同。
答案 1 :(得分:1)
只是添加到另一个答案,您可以在主文件中添加以下几行:
(function (module) {
let path = require('path')
let __require = module.constructor.prototype.require
let __cpath = __dirname
module.constructor.prototype.require = function (str) {
if (str.startsWith('package:')) {
let package = str.substr(8)
let p = path.resolve(__dirname, package)
return __require(p)
} else {
return __require(str)
}
}
})(module)
以这种方式扩展您的require
:
package:
开头(即package:src/foo/bar
),则会将其翻译为require('/absolute/path/to/your/app/src/foo/bar')
,package:
开头,那么它的行为就像普通的require
一样。