正确的方法来服务node_modules中的文件

时间:2018-12-08 05:21:42

标签: node.js npm

这是针对图书馆的,我不一定要打这个电话:

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文件将没有正确的路径来拾取asset.js文件。

例如,在index.html中,如果base设置如下:

<base href="/">

那是行不通的。我可以尝试使用:

<base href="node_modules/xxx/">

另一种解决方案是将所有内容捆绑在一起,以使index.html文件不需要对静态资产进行任何请求,但是我正在寻找一种很好的解决方案,以确保路径解析在某种程度上可以通用。例如,如果快递服务器不是在项目根目录中启动,而是在另一个子目录中启动。

1 个答案:

答案 0 :(得分:1)

假设您的文件位于node_modules中,路径为“ ./node_modules/bootstrap/dist /”

您可以创建“ / file”之类的静态路由

您可以使用:

app.use('/file',express.static(__dirname+'/node_modules/bootstrap/dist/'));

包括这样的脚本:

<script src="/file/bootstrap.min.js"></script>