【问题标题】:Include Jade mixins via JavaScript in an Express app在 Express 应用程序中通过 JavaScript 包含 Jade mixin
【发布时间】:2015-09-01 17:18:41
【问题描述】:

在我的 Express 应用程序中,我有一个文件,其中包含许多有用的 Jade mixin。我想在多个项目中使用该文件,因此我计划创建一个 NPM 模块(自托管在我们公司的私有注册表中),它将这个 mixins 文件包含到渲染的每个页面(或仅特定页面)中。

有没有办法从后端代码中做到这一点(可能使用 Express)? 或者我可以使用其他方法吗?

基本上我只是不想在每个项目中都这样做:

layout.jade

include ../../node_modules/my-custom-module/mixins

这会很丑。

【问题讨论】:

  • 您可能想看看nib module 是如何工作的,因为您尝试实现的目标似乎相似。尽管您可能需要在文件顶部使用 include WiMantisMixins 之类的东西,但这就是 nib 处理它的方式。您还可以设置一个可以切换的选项(默认情况下最好关闭),它会自动包含在所有 Jade 文件中。再次研究各种 NPM 模块如何做到这一点似乎是最好的方法。

标签: javascript node.js express pug


【解决方案1】:

您需要使用 Jade API 手动编译文件/视图,在编译之前将您的 mixins 文件与视图附加。

var jade = require('jade');
var yourJadeMixinStr = fs.readFileSync('..mixins', 'utf8');
app.use(function(req, res, next) {
    var render = res.render;
    res.render = function(view, options){

        var yourJadeViewPath = '../views/' + view + '.jade';
        var yourJadeViewStr = fs.readFileSync(yourJadeViewPath, 'utf8');

        options = extend({}, options, res.locals);
        options.filename = yourJadeViewPath;

        var finalJadeViewStr = yourJadeMixinStr + yourJadeViewStr;
        var html = jade.render(finalJadeViewStr, options);

        res.send(html);
    };
    next();
});

options.filename 是您视图中任何 include 语句的相对路径所必需的。它似乎也用于caching purposes under the hood

如果您使用app.set('views', […]) 传递多个目录以查看视图,则需要考虑这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2017-12-29
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2012-01-17
    • 2012-04-23
    相关资源
    最近更新 更多