【发布时间】:2019-05-09 19:47:51
【问题描述】:
这是给图书馆的,我不一定会打这个电话:
app.use('/node_modules', express.static('node_modules'));
我必须以不同的方式做到这一点。因为我无法控制服务器如何提供静态资产。假设我有这个结构:
project/
node_modules/
xxx/
asset.js
index.html
app.js
在 app.js 中我有:
const express = require('express');
const app = express();
app.use('/docs', (req,res){
res.render(require.resolve('./node_modules/xxx/index.html'));
});
app.listen(3000);
问题是因为服务器是从当前根目录运行的,所以 index.html 文件没有正确的路径来获取 assets.js 文件。
例如,在 index.html 中,如果 base 设置如下:
<base href="/">
那行不通。我可以尝试使用:
<base href="node_modules/xxx/">
另一个解决方案是将所有内容捆绑在一起,以便 index.html 文件不需要对静态资产提出任何请求,但我正在寻找一个很好的解决方案,以确保路径解析在某种程度上可以通用。例如,如果 express 服务器不是在项目根目录中启动,而是在另一个子目录中启动。
【问题讨论】:
-
您在问题中指的是“获取 assets.js”,但您没有向我们展示您如何尝试访问它。请向我们展示试图加载 assets.js 的 HTML。您可能不应该对核心资产使用相对路径。我真的不知道这是否是你需要的:How to include scripts located inside the node_modules folder?.
-
请记住,Express 默认不提供任何文件。因此,如果您希望 Express 服务器在浏览器请求时为 assets.js 提供服务,您需要在 Express 服务器中设置一个发送该文件的路由。而且,您的 HTML 可能应该指定绝对路径,而不是相对路径。
-
@jfriend00 不是骗子,我想这还不够清楚,我更新了 OP,我无法进行通常可以完成的
express.static调用。 -
我在重复答案中添加了更多信息,以防它现在涵盖您的情况。请查看更新。