【问题标题】:Why does require() not require an absolute path but an express.static() does?为什么 require() 不需要绝对路径,但 express.static() 需要?
【发布时间】:2019-10-19 14:15:05
【问题描述】:

我正在尝试从项目目录之外运行我的 index.js 脚本。我的项目结构如下:

    app
      - config
          - config.js
      - public
          - index.html
      - src
          - index.js

现在当我从我的应用程序文件夹之外运行我的 src/index.js 时,require() 能够解析相对路径

    const config = require(`../config/config`); 

另一方面,express.static 无法解析此类相对路径。

    e.g. app.use(express.static("../public"));

为什么我需要使用 path.join 并获取绝对路径?

【问题讨论】:

    标签: node.js express node-modules


    【解决方案1】:

    require()__dirname 无关,这与加载应用程序时的当前目录无关。始终是模块所在的目录,所以是一致的。

    express.static() 与相对路径一起使用时使用启动主应用程序的目录,因此如果您使用相对路径,其行为会因您启动应用程序的方式而异。

    来自express doc for serving static files

    但是,您提供给 express.static 函数的路径是 相对于您启动节点进程的目录。如果 从另一个目录运行 express 应用程序,使用 您要服务的目录的绝对路径

    因此,如果您希望该目录与模块相关,您必须手动将您的路径与__dirname 组合起来以形成完整路径,正如您所发现的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多