node.js - 以编程方式将目录中的所有 javascript 文件作为脚本插入 Jade 中

标签 node.js pug

我有一个 Jade 文件 index.jade 和一个包含一些 js 脚本文件的目录 public\js

views
    index.jade
public
    js
        a.js
        b.js
        ...

有没有一种方法可以自动且以编程方式将它们全部作为脚本包含在 index.jade 中?

script(src='/js/a.js')
script(src='/js/b.js')
...

最佳答案

是的,你可以做到。在我们讨论解决方案之前,让我们先谈谈为什么最好不要这样做。

Jade/pug 将所有模板编译成内存中的 JavaScript 函数,因此当您的用户请求页面时,速度非常快,因为不需要访问磁盘。磁盘访问通常是 Web 请求中最慢的部分,这就是为什么有如此多的缓存和 CDN 解决方案的原因。当您读取这些文件的文件系统时,对该页面的每个请求都将多次扫描磁盘,首先读取目录,然后将文件插入到输出中。

这些脚本文件是否真的会经常更改,以至于您需要对每个请求进行磁盘访问?如果您有太多脚本文件,不方便单独添加它们,那么您可以将脚本标签分组到单个模板中并使用 inheritancemixins来帮助你。

话虽如此,如果您仍然真的想这样做,这里是如何做到这一点......

您需要读取路由中的文件并将数组传递给模板:

var fs = require('fs');
fs.readdir(path, function(err, files) {
  // you should use a loop with a regex like ([^\/]+$) here to strip out the directory names
  // this will be specific to your server's file system setup
  res.render('<viewname>', scripts);
}

然后在模板中:

each script in scripts
  script(src= script)

关于node.js - 以编程方式将目录中的所有 javascript 文件作为脚本插入 Jade 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25358435/

相关文章:

javascript - "Failed to instantiate module ' app ' due to" Angular 和平均堆栈

express - Jade : How to include a javascript file

css - 带有 Express 和 SASS 的 Node.JS - 未应用编译的 CSS 文件

mysql - 使用 Sequelize 仅从行和关联中获取值

javascript - 有没有办法让 Node.JS 在执行 Dialogflow 输出函数之前先执行我的 MySQL 函数?

javascript - 如何从文本正文中删除特定元素?

javascript - 如何利用此 MySQL javascript 代码创建数据库/编写查询

node.js - 如何在nodejs中使用pdfkit将png格式保存为pdf格式[包含代码]

node.js - nodejs jade从配置加载链接

html - Jade 到 HTML 转换器