Pug 和 Parcel 不提供动态本地人

McL*_*vin 4 node.js express pug parceljs

我有一个使用 Pug 模板和 Parcel 的 Express 应用程序用于我的打包器。根据 Parcel docs,我可以有一个配置文件来存储我的 locals pug.config.js,但是,我需要在运行时动态地将 locals 添加到我的模板中。是否有可能做到这一点?

这是我的文件:

索引.pug

...
h1 #{isAuthenticated}
h1 #{env}
...
Run Code Online (Sandbox Code Playgroud)

pug.config.js

module.exports = {
  locals: {
    env: process.env.NODE_ENV
  }
}
Run Code Online (Sandbox Code Playgroud)

应用程序.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())  
Run Code Online (Sandbox Code Playgroud)

在这里,我试图将 locals var 设置isAuthenticated'true',但是当呈现index.pug变量为空时,同时存在envpug.config.js文件中的var 。

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

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

hac*_*ape 6

我已经简要地试用了包裹。开箱即用的体验很棒,但说到高级配置,就很糟糕了。这有点像设计,包裹只是反对配置的想法。一切都基于约定。

所以我检查了源代码。事实证明,parcel 只从'.pugrc', '.pugrc.js', 'pug.config.js'.

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

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