Динамичные местные жители недоступны с Pug и Parcel - PullRequest
1 голос
/ 19 апреля 2019

У меня есть приложение 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 var из моего файла pug.config.js присутствует.

Теперь, если я попытаюсь отобразить страницу в моих функциях контроллера с помощью res.render('index', {isAuthenticated: 'true'}) переменной isAuthenticated присутствует, однако env пусто.

Мне интересно, что я что-то здесь упускаю или это работает как положено?

1 Ответ

2 голосов
/ 20 апреля 2019

Я кратко опробовал посылку. Опыт работы с коробками потрясающий, но когда дело доходит до расширенной конфигурации, это ужасно. Это своего рода дизайн, посылки просто против идеи конфигурации. Все основано на соглашении.

Итак, я проверяю исходный код . Оказывается, посылка принимает только настройки мопса от '.pugrc', '.pugrc.js', 'pug.config.js'.

Если вы решите придерживаться способа посылки, вы можете попробовать записать свое значение locals обратно в один из этих файлов на диске. Необходимо проверить это, могут возникнуть проблемы с асинхронностью для отладки.

Я лично предпочитаю следующий метод. Вы используете pug как реальный шаблонизатор, напрямую используете API pug.compile/render для создания html. Затем вы отправляете эти html дальше, чтобы посылать, это все равно выполнит часть «связывания» работы.

...