【问题标题】:Dynamic locals unavailable with Pug and ParcelPug 和 Parcel 无法使用动态本地变量
【发布时间】:2023-03-04 18:01:01
【问题描述】:

我有一个 Express 应用程序,它使用 Pug 模板和 Parcel 作为我的捆绑器。根据包裹docs,我可以有一个配置文件来存储我的本地人pug.config.js,但是,我需要在运行时动态地将本地人添加到我的模板中。可以这样做吗?

这是我的文件:

index.pug

...
h1 #{isAuthenticated}
h1 #{env}
...

pug.config.js

module.exports = {
  locals: {
    env: process.env.NODE_ENV
  }
}

app.js

const Bundler = require('parcel-bundler')
const bundler = new Bundler(path.resolve(__dirname, 'views/index.pug'))

app
.set('views', path.join(__dirname, 'views'))
.set('view engine', 'pug')
.use(function(req, res, next) {
     res.locals.isAuthenticated = 'true'
     next()
})
.use(bundler.middleware())  

在这里,我尝试将本地变量 isAuthenticated 设置为 'true',但是在渲染 index.pug 时,变量为空,同时,我的 pug.config.js 文件中的 env 变量存在。

现在,如果我尝试使用 res.render('index', {isAuthenticated: 'true'}) 在控制器函数中呈现页面,则变量 isAuthenticated 现在存在,但 env 为空。

我想知道我是否在这里遗漏了什么,或者这是否按预期工作?

【问题讨论】:

    标签: node.js express pug parceljs


    【解决方案1】:

    我已经简单地试用了包裹。开箱即用的体验很棒,但是在高级配置方面,它很糟糕。这有点设计,包裹只是反对配置的想法。一切都以约定为基础。

    所以我检查了source code。原来 parcel 只需要来自 '.pugrc', '.pugrc.js', 'pug.config.js' 的 pug 配置。

    如果您选择坚持使用包裹方式,您可以尝试将您的locals 值写回磁盘上的这些文件之一。需要测试一下,可能有一些异步问题需要调试。

    我个人更喜欢以下方法。你使用 pug 作为一个真正的模板引擎,直接使用pug.compile/render API 来生成 html。然后,您将这些 html 进一步通过管道传输到 parcel,它仍然会完成工作的“捆绑”部分。

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      相关资源
      最近更新 更多