【问题标题】:Require a javascript library inside Jade需要 Jade 中的 javascript 库
【发布时间】:2014-06-03 05:12:52
【问题描述】:

我如何require 一个库,以便它在 Jade 中工作。

如果我想在 Jade 中使用CircularJSON

script var object = #{CircularJSON.stringify(object)}

I would basically need to define the function from that library into Jade

- var CircularJSON = function(e,t){function l(e,t,o){var u=[],...//whole function

这对于更复杂的库来说是不切实际的,甚至是不可能的。

有没有办法以某种方式简单地 require 代替它?

【问题讨论】:

    标签: node.js pug


    【解决方案1】:
    var myLib = require('../mylib');
    response.render("index.jade", {
      lib  :  myLib
    });
    

    index.jade 现在有 myLib 对象。现在就像在其他任何地方一样使用。

    【讨论】:

      【解决方案2】:

      只需在节点中要求它并将其传递给locals 中的模板。 locals 可以包含函数以及整个模块、对象和标量数据。

      【讨论】:

      • 整个“本地人”交易对我来说非常令人困惑(对于节点世界来说非常新)。这是 Jade、Node 还是 JS 的东西?在你的答案中加入一些例子会很有帮助。
      • 本地人既是玉的东西,也是快递的东西。模板采用带有一些占位符的字符串并将占位符替换为实际数据值。真实的数据值被称为“locals”。例如,请参阅 true 的答案。
      • 感谢彼得的洞察力。似乎让我感到困惑的主要原因是进入 Node 世界而不进入 Express 世界。我正在将 Gulp 用于自定义静态 bulid 系统...发布a related question here
      【解决方案3】:

      我喜欢采用类似于Peter Lyons 和胡志峰(在另一篇文章中)的方法,但我不需要将所有内容都输入本地,我只需要“require”,然后我可以根据需要在模板中提取内容。

      app.use((req, res, next) => { res.locals.require = require; next() })

      然后在 Jade/Pug 中

      - const moment = require('moment')
      div Created at: #{moment(data.createdAt).fromNow()}
      

      基本上是一样的,但我可以将需要的代码保留在使用它的模板中。

      【讨论】:

      • 注意:require 只会根据传递给它的原始文件解析路径。这在使用 node_modules 中的库(如moment)时无关紧要,但如果使用传递的require 的玉文件位于不同的目录中,则相对路径(如./x../xx)可能不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多