Nodejs jade 模版里面试用include, 子模板首行必须要留一个空行?
Nodejs jade 模版里面试用include, 子模板首行必须要留一个空行?
node -v v0.10.5
.navbar-wrapper // Wrap the .navbar in .container
如果不留这个空行,我的页面就会报语法错误 如果留这个空行,就会影响我的页面输出,多出一个空行
难道,我必须要留这个空行?可是看官方的example也没留啊,这是为什么?!
Node.js Jade 模板中使用 include
,子模板首行必须要留一个空行?
背景
在使用 Node.js 和 Jade 模板引擎时,有时会遇到一些令人困惑的行为。比如,在某些情况下,如果你的子模板文件的第一行没有留空行,可能会导致渲染错误。
示例
假设你有一个主模板 index.jade
和一个子模板 header.jade
。
header.jade
.navbar-wrapper
// Wrap the .navbar in .container
.navbar
ul
li= 'Home'
li= 'About'
li= 'Contact'
index.jade
doctype html
html
head
title My Page
body
include ./header.jade
p This is my main content.
问题描述
当你运行这个模板,如果你的 header.jade
文件的第一行没有留空行,你可能会看到类似这样的错误:
Error: Unexpected token ILLEGAL
解释
Jade 模板引擎对缩进非常敏感。在某些情况下,如果你的子模板文件的第一行没有留空行,Jade 可能会误解析你的模板内容,从而导致语法错误。这并不是 Jade 的官方文档中明确说明的要求,但可能是由于 Jade 在处理嵌套内容时的内部机制所导致的。
解决方案
为了确保你的模板能够正确渲染,最好在子模板文件的第一行留一个空行。这样可以避免潜在的语法错误。
修改后的 header.jade
.navbar-wrapper
// Wrap the .navbar in .container
.navbar
ul
li= 'Home'
li= 'About'
li= 'Contact'
结论
虽然在官方文档中没有明确提到这一点,但在实际开发过程中,为了解决潜在的解析问题,建议在子模板文件的第一行留一个空行。这不仅可以避免语法错误,还能确保你的页面内容按预期显示。
希望这个解释对你有所帮助!
.navbar-wrapper上面有个空行
感谢回复。
报错信息:‘Unexpected intend’
已解决:因为我是在windows下编程,所以默认的文件是GBK,后来转成UTF-8后是包含BOM的,用工具移除BOM后,一切正常。另外语法里面!!!也可以解决
中文的相关讨论还是太少了,查出这个原因花了不少时间
在使用 Jade(Pug)模板引擎时,子模板通过 include
引入的内容可能会遇到一些格式问题。特别是,子模板的首行必须留一个空行,这通常是因为 Jade 对于空行非常敏感。
示例代码
假设我们有两个文件:
layout.jade
doctype html
html
head
title= title
body
include navbar
navbar.jade
.navbar-wrapper
// Wrap the .navbar in .container
.navbar
ul.nav
li= menuName
在这个例子中,navbar.jade
的首行前面有一个空行。如果你删除这个空行,Jade 可能会解析出错。
解释
Jade/Pug 模板引擎对缩进非常敏感。子模板 navbar.jade
首行之前的空行可能被解释为文本内容的一部分。如果你不保留这个空行,Jade 可能无法正确解析模板结构,导致语法错误。
然而,如果你不希望子模板中出现额外的空行,可以尝试以下方法:
-
使用条件判断:如果你不想在最终生成的 HTML 中包含多余的空行,可以在父模板中进行条件判断。
-
修改子模板内容:确保子模板内容的格式正确,并且没有不必要的空白行。
-
升级 Jade 版本:如果你使用的是较旧版本的 Jade,考虑升级到最新版本。新版本可能已经修复了这些敏感性问题。
希望这能帮助你解决 Jade 模板中的问题。