Pug 和 Parcel 不可用的动态局部变量
Dynamic locals unavailable with Pug and Parcel
我有一个 Express 应用程序,它使用 Pug 模板和 Parcel 作为我的捆绑器。根据 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
时变量为空,同时,我的 env
变量pug.config.js
文件存在。
现在,如果我尝试使用 res.render('index', {isAuthenticated: 'true'})
在我的控制器函数中呈现页面,变量 isAuthenticated
现在存在,但是 env
是空的。
我想知道我是否遗漏了什么,或者这是否按预期工作?
我已经简单试用了包裹。开箱即用的体验很棒,但在高级配置方面,就很糟糕了。这是设计使然,包裹只是反对配置的想法。一切以约定俗成。
所以我检查了 source code。结果 parcel 只从 '.pugrc', '.pugrc.js', 'pug.config.js'
.
获取哈巴狗配置
如果您选择坚持使用包裹方式,您可以尝试将您的 locals
值写回磁盘上的这些文件之一。需要测试一下,可能有一些异步问题需要调试。
我个人比较喜欢下面的方法。你用pug作为一个真正的模板引擎,直接使用pug.compile/render
API来制作html。然后,您将这些 html 进一步传送到 parcel,它仍然会完成 "bundling" 部分工作。
我有一个 Express 应用程序,它使用 Pug 模板和 Parcel 作为我的捆绑器。根据 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
时变量为空,同时,我的 env
变量pug.config.js
文件存在。
现在,如果我尝试使用 res.render('index', {isAuthenticated: 'true'})
在我的控制器函数中呈现页面,变量 isAuthenticated
现在存在,但是 env
是空的。
我想知道我是否遗漏了什么,或者这是否按预期工作?
我已经简单试用了包裹。开箱即用的体验很棒,但在高级配置方面,就很糟糕了。这是设计使然,包裹只是反对配置的想法。一切以约定俗成。
所以我检查了 source code。结果 parcel 只从 '.pugrc', '.pugrc.js', 'pug.config.js'
.
如果您选择坚持使用包裹方式,您可以尝试将您的 locals
值写回磁盘上的这些文件之一。需要测试一下,可能有一些异步问题需要调试。
我个人比较喜欢下面的方法。你用pug作为一个真正的模板引擎,直接使用pug.compile/render
API来制作html。然后,您将这些 html 进一步传送到 parcel,它仍然会完成 "bundling" 部分工作。