gulp+PC前端静态页面项目开发

前言:

现在单页面很流行,但是在 PC 端多页面还是常态,所以构建静态页面的工具还有用武之地

gulp构建前言:

如今我们开发web网页的方式主要有几种,使用vue-cli、create-react-app、webpack、不借助构建工具等实现单页或多页网站。“工欲善其事,必先利其器”,前三种方式无疑能满足我们开发网页的绝大部分需求,但在某些情况下,比如前后端不分离(jsp、php、tpl等嵌套后端语言的方式),以及单纯地开发一些静态页(活动页、帮助手册等),使用gulp搭建一个轻量级的前端开发环境是一个选择。

很多时候我们在写静态页面的时候也希望能和后台模板一样,将导航、页头、页脚等公用的部分分离出去,然后引入页面中。单纯的静态页面不具备这种功能,而使用 gulp 插件可以很容易的完成,比如 gulp-file-include 插件。

使用gulp的目的:是实现自动化构建,提升开发效率、代码质量

压缩html、css、js、图片
编译ES6、less/scss
补全css前缀
px转rem
静态资源缓存控制
静态服务器
代码检查

gulp创建初始化项目

1)创建初始化项目:

npm install --global gulp // 全局安装gulpnpm install --global gulp-cli  // 安装gulp命令行工具mkdir my-project // 创建项目目录并进入
cd my-projectnpm init // 初始化项目,在项目目录下创建package.json文件
npm install  gulp --save-dev //在项目中安装gulp
npm install gulp-file-include --save-dev //安装 gulp-file-include 插件gulp --version  // 检查gulp版本 

2)根目录下创建一个名为gulpfile.js的文件
gulpfile.js 配置如下:

let gulp = require('gulp');
let fileInclude = require('gulp-file-include');gulp.task('fileInclude', function() {gulp.src(['src/*.html'])//主文件.pipe(fileInclude({prefix: '@@',//变量前缀 @@includebasepath: '@file',//引用文件路径indent: false //保留文件的缩进})).pipe(gulp.dest('dist'));//输出文件路径
});

3)新建页面源码文件src,基本的目录结构如下:
在这里插入图片描述
head.html

<meta charset="UTF-8">
<meta name="viewport" content="width=1500, target-densitydpi=device-dpi"/>
<meta name="description" content="@@description"/>
<meta name="keywords" content="@@keywords"/>
<title>@@title</title>
<link type="text/css" rel="stylesheet" href="css/common.css"/>
@@if(context.cssList && context.cssList.length > 0) {@@for(var i = 0; i < context.cssList.length; i++) {<link type="text/css" rel="stylesheet" href="css/`+context.cssList[i]+`"/>}
}
<script type="text/javascript" src="js/common.js"></script>
@@if(context.jsList && context.jsList.length > 0) {@@for(var i = 0; i < context.jsList.length; i++) {<script type="text/javascript" src="`+context.jsList[i]+`"></script>}
}

hrader.html

<div class='menu'><ul><li><a href="/index.html">首页</a></li><li><a href="/trade-news.html">行业新闻</a></li><li><a href="/product.html">公司产品</a></li><li><a href="/contact.html">联系我们</a></li></ul>
</div>

footer.html

<div>这是footer部分</div>

home.html

<!DOCTYPE html>
<html lang="en"><head>@@include('template/head.html', {"title": "gulp-pc-demo", "cssList": ["home.css"], "jsList": [], "keywords":"关键词", "description":"描述"})</head><body>@@include('template/header.html')<div>hello</div>@@include('template/footer.html')</body>
</html>

4)运行

gulp fileInclude

在这里插入图片描述

gulp进阶配置(真正项目配置)

链接: https://www.kancloud.cn/return18/a-009/1278801

页面开发技巧:

页面样式:

导航条:

导航条是主要的引用内容,但是一般当前页面的导航都会有选中效果,那么就要使用 gulp-file-include 的判断功能。后台模板统一引入后也要考虑链接的选中问题。之前公司在用后台模板的时候就遇到过这个问题。其实无论是后台还是前台,在引入导航条这个问题上的解决方法差不多,都是在当前页面定义一个私有变量,通过这个变量来设置链接的选中效果,而 gulp-file-include 的变量通过传参实现。具体方法如下:
index.html

<!DOCTYPE html>
<html><body>@@include('./navbar.html',{"index": "active"})</body>
</html>

navbar.html

<ul class="navbar"><li @@if (context.index==='active' ) { class="active" }><a href="index.html">首页</a></li><li @@if (context.about==='active' ) { class="active" }><a href="about.html">关于</a></li><li @@if (context.contact==='active' ) { class="active" }><a href="contact.html">联系我们</a></li>
</ul>

编译结果:

<!DOCTYPE html>
<html><body><ul class="navbar"><li  class="active" ><a href="index.html">首页</a></li><li ><a href="about.html">关于</a></li><li ><a href="contact.html">联系我们</a></li></ul></body>
</html>

面包屑:

面包屑也是常用的功能,不过有些时候并不需要前端构建的方式生成,在此作为一个案例来说明吧。生成面包屑的方法很多,我使用了传参的方法,通过传递一个导航路径数组,然后循环生成面包屑。因为面包屑的最后一项没有连接,所以循环要分两次执行。具体方法如下:
index.html

<!DOCTYPE html>
<html><body>@@include('./breadcrumb.html',{"title":"首页","breadcrumb":[{"url":"...","text":"首页"},{"url":"...","text":"链接一"},{"url":"","text":"链接二"}]})</body>
</html>

breadcrumb.html

<div class="page-header"><h2>@@title</h2><ol class="breadcrumb">@@for (var i = 0; i < (context.breadcrumb.length-1); i++) {<li><a href="`+context.breadcrumb[i].url+`">`+context.breadcrumb[i].text+`</a></li>}<!-- 面包屑最后一项无链接 -->@@for (var i = (context.breadcrumb.length-1); i < context.breadcrumb.length; i++) {<li><strong>`+context.breadcrumb[i].text+`</strong></li> }</ol>
</div>

编译结果:

<!DOCTYPE html>
<html><body><div class="page-header"><h2>首页</h2><ol class="breadcrumb"><li><a href="...">首页</a></li><li><a href="...">链接一</a></li><!-- 面包屑最后一项无链接 --><li><strong>链接二</strong></li> </ol></div></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue开发问题积累

mounted钩子中使用$refs出现undefined 原因&#xff1a;如果在DOM结构中的某个DOM节点使用了v-if、v-show或者v-for&#xff08;即根据获得的后台数据来动态操作DOM&#xff0c;即响应式&#xff09;&#xff0c;那么这些DOM是不会再mounted阶段找到的。 **解决方法&#xff1…

动态规划0—1背包问题

动态规划0-1背包问题 问题描写叙述&#xff1a;给定n种物品和一背包。物品i的重量是wi&#xff0c;其价值为vi&#xff0c;背包的容量为C。问应怎样选择装入背包的物品&#xff0c;使得装入背包中物品的总价值最大?对于一种物品&#xff0c;要么装入背包&#xff0c;要么不装。…

vmstat命令详解

参数详情&#xff1a; r runingb blockswpd 虚拟内存使用时间free 物理free内存buff 从硬盘--->内存的 缓冲cache 从内存--->硬盘的 缓存si 从磁盘写入swap的大小/sso 从swap写入磁盘的大小/sbi 块设备每秒接收的块数量bo 块设备每秒发送的块数量cs 每秒上下文切换次数us…

CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)...

策略模式(Strategy Pattern)&#xff1a;定义一系列算法类&#xff0c;将每一个算法封装起来&#xff0c;并让它们可以相互替换&#xff0c;策略模式让算法独立于使用它的客户而变化&#xff0c;也称为政策模式(Policy)。 模式角色与结构&#xff1a; 示例代码&#xff1a; usi…

评论 展开|收起

场景&#xff1a; 列表中文本最多三行&#xff0c;超出部分省略&#xff0c;并显示展开收起按钮&#xff0c;如果文本没有超出三行则不显示展开收起按钮 方案&#xff1a; 1&#xff09;在div 中添加一个span 然后给div设置超出三行省略&#xff0c;这时候就可以获取到文本高…

引用类型赋值

转载于:https://www.cnblogs.com/dongyuhan/p/6519711.html

Windows Phone开发(30):图形 转:http://blog.csdn.net/tcjiaan/article/details/7453028

图形如矩形、椭圆、路径等都从Shape类派生&#xff0c;它们一般表示规则或不规则图形&#xff0c;这些图形都是简单的二维图形&#xff0c;我相信大家都能理解的。 例一&#xff1a;矩形。 请看下面的XAML代码。 [html] view plaincopyprint? <Rectangle RadiusX"20&q…

Windows Phone开发(46):与Socket有个约会 转:http://blog.csdn.net/tcjiaan/article/details/7669315...

不知道大家有没有“谈Socket色变”的经历&#xff1f;就像我一位朋友所说的&#xff0c;Socket这家伙啊&#xff0c;不得已而用之。哈&#xff0c;Socket真的那么恐怖吗&#xff1f; 其实这话一点也不假&#xff0c;Socket有时候真的不太好操控&#xff0c;也不好维护&#xff…

百度分享插件wbuid属性无法@指定微博

好久不写博客&#xff0c;看到很多人遇到相关的问题&#xff0c;决定写一篇拯救大家于水火 现象很简单&#xff0c;你要是根据官网的例子来&#xff0c;肯定出错。。。。 官网上教你如果想在分享时自动""并且在分享后提示关注要用wbuid这个属性来配置微博id对不对&am…

10 进制转 2 进制、16 进制

为什么80%的码农都做不了架构师&#xff1f;>>> function IntToBin(Value: LongInt; Size: Integer): String; vari: Integer; beginResult:;for i:Size-1 downto 0 dobeginif Value and (1 shl i)<>0 thenResult:Result1elseResult:Result0;end; end;//举例…

SSH之Hibernate总结篇

Hibernate hibernate 简介&#xff1a; hibernate是一个开源ORM(Object/Relationship Mipping)框架&#xff0c;它是对象关联关系映射的持久层框架&#xff0c;它对JDBC做了轻量级的封装&#xff0c;而我们java程序员可以使用面向对象的思想来操纵数据库。 为什么要用hibernate…

Vue开发规范

规范目的 为提高团队协作效率 便于后台人员添加功能及前端后期优化维护 输出高质量的文档 命名规范 为了让大家书写可维护的代码&#xff0c;而不是一次性的代码 让团队当中其他人看你的代码能一目了然 甚至一段时间时候后你再看你某个时候写的代码也能看 css命名规范 遵循…

Vue项目搭建流程

Vue 简介 vue是目前前端最具前景的框架之一&#xff0c;能帮助我们快速搭建并开发前端项目。 Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;…

Vue模板语法详解

vue基础、安装、介绍双大括号&#xff08;Mustache语法&#xff0c;又叫胡子语法&#xff09;v-textv-htmlv-showv-if、v-else-if、v-elsev-show 与 v-if 的区别v-forv-for 中的 keyv-if 与 v-for 一起使用v-on&#xff08;缩写&#xff1a; &#xff09;v-bind&#xff08;缩写…

小白如何从零开始运营微信公众号?

小白如何从零开始运营微信公众号&#xff1f; 一、公众号定位&#xff0c;名称&#xff0c;头像 第一步公众号定位&#xff0c;最重要。如果你自己都讲不清楚自己是干嘛的&#xff0c;还有谁愿意来关注你呢&#xff1f;无论是旅游攻略还是美妆种草&#xff0c;成长干货还是养生…

软件测试技术lab1 2017.3.13

1.安装Junit和Hamcrest 2. 安装Eclemma 3.三角问题的测试用例 4.测试结果及coverage覆盖 转载于:https://www.cnblogs.com/kale12/p/6543904.html

Fiddler 抓包详细使用教程

主要抓包工具介绍与对比&#xff08;一&#xff09;Fiddler介绍&#xff08;二&#xff09;Fiddler与其他工具对比&#xff08;三&#xff09;工作原理&#xff08;四&#xff09;下载安装&#xff08;五&#xff09;Fiddler界面概述1 主菜单说明2. 快捷菜单说明3.会话列表说明…

如何学习微信公众平台的开发?

如何学习微信公众平台的开发&#xff1f; 在整个移动互联网的开发技术中&#xff0c;微信公众号的开发几乎是成本最低&#xff0c;传播最快&#xff0c;影响最广的&#xff0c;你几乎不需要再添加任何配置&#xff0c;就可以开始。 个人可以申请公众号&#xff0c;需要高级权限…

pom.xml配置文件配置jar(不用记,快速配置)

1&#xff1a;网址:http://mvnrepository.com/ 2:在搜索栏搜索要用的框架;例如spring *以下为示例 转载于:https://www.cnblogs.com/kaiwen/p/6545581.html

HTML中各种 div 位置距离关系

HTML中各种 div 位置距离关系一. 盒模型图片展示&#xff1a;二. 位置距离计算属性三. 应用场景一. 盒模型图片展示&#xff1a; 二. 位置距离计算属性 offsetWidth, offsetHeight 获取盒子的宽度/高度&#xff08;包括盒子的border&#xff0c;padding和内容width/height&…