为了账号安全,请及时绑定邮箱和手机立即绑定

如何包括位于node_modules文件夹内的脚本?

如何包括位于node_modules文件夹内的脚本?

人到中年有点甜 2019-12-06 14:06:47
我有一个关于node_modules纳入HTML网站的最佳做法的问题。假设我的node_modules文件夹中有Bootstrap 。现在,对于网站的发行版(实时版本),我将如何包括位于node_modules文件夹内的Bootstrap脚本和CSS文件?将Bootstrap保留在该文件夹中并执行以下操作是否有意义?<script src="./node_modules/bootstrap/dist/bootstrap.min.js></script>还是我必须在gulp文件中添加规则,然后将这些文件复制到dist文件夹中?还是最好让gulp从我的HTML文件中完全删除本地引导程序并将其替换为CDN版本?
查看完整描述

4 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

通常,您不希望向外界公开服务器内部结构的任何内部路径。可以做的是/scripts在服务器中建立一条静态路由,从它们所驻留的任何目录中获取文件。因此,如果文件位于"./node_modules/bootstrap/dist/"。然后,页面中的脚本标签如下所示:


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

如果您对nodejs使用express,那么静态路由就这么简单:


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

然后,来自的所有浏览器请求/scripts/xxx.js都将自动从您的dist目录中获取__dirname + /node_modules/bootstrap/dist/xxx.js。


注意:较新版本的NPM会将更多内容放在顶层,而不是嵌套得太深,因此,如果您使用较新版本的NPM,则路径名将不同于OP的问题和当前答案中指示的名称。但是,概念仍然相同。您可以找到文件在服务器驱动器上的物理位置,并app.use()使用它们express.static()来创建这些文件的伪路径,这样就不会将实际的服务器文件系统组织暴露给客户端。


如果您不想创建这样的静态路由,则最好将公共脚本复制到Web服务器确实视为的路径/scripts或要使用的任何顶级名称。通常,您可以将此复制作为构建/部署过程的一部分。


如果您只想在目录中公开一个特定文件,而不是在该目录中找到所有文件,那么可以为每个文件手动创建单独的路由,而不必使用express.static()诸如:


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

以及为此创建路线的代码


app.get('/bootstrap.min.js', function(req, res) {

    res.sendFile(__dirname + '/node_modules/bootstrap/dist/bootstrap.min.js');

});

或者,如果您仍然想使用来描绘脚本的路由/scripts,则可以执行以下操作:


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

以及为此创建路线的代码


app.get('/scripts/bootstrap.min.js', function(req, res) {

    res.sendFile(__dirname + '/node_modules/bootstrap/dist/bootstrap.min.js');

});



查看完整回答
反对 回复 2019-12-07
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

我将使用路径npm模块,然后执行以下操作:


var path = require('path');

app.use('/scripts', express.static(path.join(__dirname, 'node_modules/bootstrap/dist')));


查看完整回答
反对 回复 2019-12-07
?
守着一只汪

TA贡献1872条经验 获得超3个赞

如jfriend00所述,您不应公开服务器结构。您可以将项目依赖项文件复制到public/scripts。您可以使用dep-linker 轻松完成此操作,如下所示:


var DepLinker = require('dep-linker');

DepLinker.copyDependenciesTo('./public/scripts')

// Done



查看完整回答
反对 回复 2019-12-07
  • 4 回答
  • 0 关注
  • 466 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信