Pug和Parcel无法使用动态本地人

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pug和Parcel无法使用动态本地人相关的知识,希望对你有一定的参考价值。

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

这是我的文件:

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变量为空时,同时,我的env文件中的pug.config.js变量存在。

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

我想知道我是否在这里遗漏了一些东西,或者这是否按预期工作?

答案

我已经简单试过了包裹。开箱即用的体验很棒,但是当涉及到高级配置时,它很糟糕。这有点像设计,包裹只是反对配置的想法。一切都基于惯例。

所以我检查source code。结果包只需要从'.pugrc', '.pugrc.js', 'pug.config.js'获取pug配置。

如果您选择坚持使用parcel方式,则可以尝试将locals值写回磁盘上的其中一个文件。需要测试它,可能有一些异步问题需要调试。

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

以上是关于Pug和Parcel无法使用动态本地人的主要内容,如果未能解决你的问题,请参考以下文章

使用 Parceljs 动态加载图像

pug学习

Pug (Jade) 动态添加属性内联的存在

如何动态呈现 pug 文件而不是使用静态 angular-cli index.html?

如何将数组变量从javascript传递到pug文件?

JS周刊#405 - 精通模块化 JS,Parcel 1.10.0 发布,Trix 1.0 富文本编辑器,创建虚拟鸟类的簇拥行为