繁体   English   中英

在Node.js中避免相对需求路径

[英]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

  • 如果path以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM