我正在尝试从项目目录外部运行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并获取绝对路径?
答案 0 :(得分:2)
require()
在__dirname
下有效,这与加载应用程序时的当前目录无关。它始终是模块所在的目录,因此保持一致。
express.static()
与相对路径一起使用时,会使用主应用程序启动表单的目录,因此,如果您使用相对路径,则其行为取决于您启动应用程序的方式。
来自express doc for serving static files:
但是,您提供给express.static函数的路径是 相对于您从中启动节点进程的目录。如果 您从另一个目录运行Express App,则使用 您要提供服务的目录的绝对路径
因此,如果您希望目录是相对于模块的,则必须手动将路径与__dirname
组合以形成完整路径,如您所知。