Включение файла мопса приводит к ошибке, но Jade работает нормально
Здесь возникает странная проблема. У меня есть довольно простое включение Jade / Pug:
extends base.pug
block vars
- var title = 'Home'
block body
header
include ./includes/header.pug
Небольшое замечание, просто использование базовых расширений (без расширения) просто не работает. Но это включает в себя следующую ошибку:
TypeError: Cannot read property 'replace' of undefined
at before (/var/node/website/node_modules/pug-linker/index.js:104:48)
at walkAST (/var/node/website/node_modules/pug-walk/index.js:13:26)
at /var/node/website/node_modules/pug-walk/index.js:21:16
at Array.map (native)
at walkAST (/var/node/website/node_modules/pug-walk/index.js:20:29)
at walkAST (/var/node/website/node_modules/pug-walk/index.js:33:21)
at /var/node/website/node_modules/pug-walk/index.js:21:16
at Array.map (native)
at walkAST (/var/node/website/node_modules/pug-walk/index.js:20:29)
at /var/node/website/node_modules/pug-walk/index.js:21:16
at Array.map (native)
at walkAST (/var/node/website/node_modules/pug-walk/index.js:20:29)
at applyIncludes (/var/node/website/node_modules/pug-linker/index.js:102:10)
at link (/var/node/website/node_modules/pug-linker/index.js:21:9)
at compileBody (/var/node/website/node_modules/pug/lib/index.js:84:11)
at Object.exports.compile (/var/node/website/node_modules/pug/lib/index.js:164:16)
Но изменив это на:
extends base.pug
block vars
- var title = 'Home'
block body
header
include ./includes/header.jade
Работает отлично. Содержимое header.jade и header.pug точно такое же, поэтому я немного озадачен здесь. Некоторая помощь будет оценена.
Спасибо,
PS: Поиск действительно показал: https://github.com/pugjs/pug-linker/issues/13 - кажется, ошибка, но не уверен, как это может быть.
2 ответа
Похоже, мопс на самом деле не готов к прайм-тайму! С нетерпением ждем, когда это произойдет, но использование jade вместо pug решит проблему, просто переименуйте все в .jade
,
Одно из главных изменений в переходе от Jade к Pug - это то, что вы больше не можете интерполировать переменные. Раньше вы могли (и поощряли) использовать #{something}
внутри другой строки, но теперь вам рекомендуется использовать обычные переменные JavaScript.
например, это
a(href="#{link}")
a(href='before#{link}after')
теперь должен стать
a(href=link)
a(href=`before${link}after`) //(on Node.js/io.js ≥ 1.0.0)
a(href='before' + link + 'after') //(everywhere)
Источник: отслеживание проблемы с критическими изменениями.