在Node.js

时间:2017-07-13 09:22:52

标签: javascript node.js

我更喜欢导入依赖项,而不需要像../../../foo/bar那样的大量相关文件系统导航。

在前端,我传统上使用RequireJS配置默认基本路径,该路径启用“绝对”路径,例如myapp/foo/bar

如何在Node.js中实现这一目标?

2 个答案:

答案 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一样。
相关问题