pug,原名jade,是流行的HTML模板引擎,,最大的特色是使用缩进排列替代成对标签。它简化了HTML的成对标签的写法,使代码更加简洁、开发效率更高,但是同时它也带来了一些副作用:可移植性差、调试困难、性能并不出色。
#hello
<div id="hello"></div>
a.link-button Link
<a class="link-button">Link</a>
npm i -D pug pug-html-loader pug-plain-loader
// webpack.base.conf
{
test:/\.pug$/,
loader: "pug-html-loader"
}
// 或者
module.exports = {
chainWebpack: config => {
config.module.rule('pug')
.test(/\.pug$/)
.use('pug-html-loader')
.loader('pug-html-loader')
.end()
}
}
<template lang="pug">
div.hello
h1 Hello World
</template>
下面将拿出实际项目中的一些代码进行改造
原代码
<template>
<div class="gallery">
<div class="btn-group">
<span>选择相册:</span>
<Select v-model="cataId" style="width:200px">
<Option v-for="item in catalogs" :value="item.id" :key="item.id" clearable>{{ item.name }}</Option>
</Select>
<Button type="info">上传照片</Button>
</div>
<vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="loadMore" ref="waterfall"></vue-waterfall-easy>
</div>
</template>
改造后 12行代码变成9行,标签完全简化
<template lang="pug">
.gallery
.btn-group
span 选择相册:
Select(v-model="cataId" style="width:200px")
Option(v-for="item in catalogs" :value="item.id" :key="item.id" clearable) {{ item.name }}
Button(type="info") 上传照片
vue-waterfall-easy(:imgsArr="imgsArr" @scrollReachBottom="loadMore" ref="waterfall")
</template>
pug和HTML最大的不同在于它拥有自己的语法,拥有循环、条件控制、定义变量等功能。可以说如果在没有前端框架的年代,这些功能是多么的有诱惑力,但是,近几年React、Vue的出现,已经解决了这些痛点。
<template lang="pug">
- let friends = 10 //加上-后不会进行输出
case friends
when 0
p 您没有朋友
when 1
p 您有一个朋友
default
p 您有 #{friends} 个朋友
</template>
<template lang="pug">
- let user = { description: 'foo bar baz' }
- let authorised = false
#user
if user.description
h2.green 描述
p.description= user.description
else if authorised
h2.blue 描述
p.description.
用户没有添加描述。
不写点什么吗……
else
h2.red 描述
p.description 用户没有描述
</template>
<!--解析后-->
<div id="user">
<h2 class="green">描述</h2>
<p class="description">foo bar baz</p>
</div>
上面的例子跟JavaScript的switch和if判断很相似。
<template lang="pug">
div
- for (let x = 0; x < 3; x++)
li item
</template>
<!--解析后-->
<div>
<li>item</li>
<li>item</li>
<li>item</li>
</div>
<template lang="pug">
div
- let list = ["Uno", "Dos", "Tres","Cuatro", "Cinco", "Seis"]
each item in list
li= item
</template>
<!--解析后-->
<template>
<div>
<li>Uno</li>
<li>Dos</li>
<li>Tres</li>
<li>Cuatro</li>
<li>Cinco</li>
<li>Seis</li>
</div>
</template>
可以看到,在pug里面可以使用for循环进行遍历,同时我还发现webstorm的代码格式化在格式化pug代码的时,不能正确的进行缩进,如果对上面的代码进行格式化,代码将无法正常进行解析。
可以通过include xxx.pug将外部的文件插入进来,当然由于Vue自身已经包含了模块化功能,所以这项功能在Vue中几乎没有用处
- var title = "On Dogs: Man's Best Friend";
- var author = "enlore";
- var theGreat = "<span>转义!</span>";
h1= title
p #{author} 笔下源于真情的创作。
p 这是安全的:#{theGreat}
<!--解析后-->
<h1>On Dogs: Man's Best Friend</h1>
<p>enlore 笔下源于真情的创作。</p>
<p>这是安全的:<span>转义!</span></p>
以上是对pug模板引擎的一些了解,如果针对性工作可在官网上学习哦~