[英]Avoiding relative require paths in Node.js
我更喜欢在没有很多相关文件系统导航(例如../../../foo/bar
情况下导入依赖项。
在前端,我通常使用RequireJS来配置默认的基本路径,以启用“绝对”路径,例如myapp/foo/bar
。
如何在Node.js中实现?
您可以做的是使用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
只需添加其他答案,您就可以在主文件中添加以下几行:
(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:
开头的package:
那么它的行为就像正常的require
那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.