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,一经查实,立即删除!

相关文章

Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用

struts2中的Action接收表单传递过来的参数有3种方法&#xff1a; 如&#xff0c;登陆表单login.jsp&#xff1a; 1 <form action"login" method"post"name"form1"> 2 3 4   用户名&#xff1a;<s:textfieldname"username&quo…

【Linux】vi编辑器命令

1)进入vi的命令 vi filename : 打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename : 打开文件&#xff0c;并将光标置于第n行首 vi filename : 打开文件&#xff0c;并将光标置于最后一行首 vi /pattern filename: 打开文件&a…

The Architecture of Open Source Applications

http://www.aosabook.org/en/index.html 有 nginx http://www.aosabook.org/en/nginx.html转载于:https://www.cnblogs.com/cloudstorage/archive/2012/07/12/2588196.html

html2canvas生成海报的各种问题

html2canvas&#xff08;一&#xff09;官网下载安装&#xff08;二&#xff09;基础用法&#xff08;三&#xff09;生成海报问题canvas高分屏下的模糊问题html2canvas图片模糊问题canvas图片getImageData,toDataURL跨域问题1) 首先&#xff0c;图片服务器需要配置Access-Cont…

Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。

目标&#xff1a; Bootstrap中DropDown插件显示下拉列表&#xff0c;点击下拉列表区域&#xff0c;不会再自动关闭。 参考&#xff1a;http://v3.bootcss.com/javascript/#dropdowns // http://stackoverflow.com/questions/19740121/keep-bootstrap-dropdown-open-when-cl…

前端字符串内HTML标签无效的处理方式

1&#xff09;将元素的innerText 赋值成 元素的 innerHTML。即可避免转义的问题&#xff0c;将字符串中包含的 HTML标签生效。 <div ref"introContent" class"intro__content">{{intro}}</div>mounted() {// let text this.$refs.introConte…

获取当前目录绝对路径

echo offecho 当前盘符&#xff1a;%~d0echo 当前盘符和路径&#xff1a;%~dp0echo 当前批处理全路径&#xff1a;%~f0echo 当前盘符和路径的短文件名格式&#xff1a;%~sdp0echo 当前CMD默认目录&#xff1a;%cd%echo 目录中有空格也可以加入""避免找不到路径echo 当…

【CSS】css特殊性-优先级-权重

注&#xff1a;文章来源&#xff1a;《css权威指南》 第三章。 部分未予记录css选择器可以用多种方式去选择元素&#xff0c;实际上一个元素可以由使用两个或者多个规则来匹配&#xff0c;每个规则都有各自的选择器。请看例子CSS:h1 {color: red;}body h1 {color: green;}h2.gr…

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;要么不装。…

Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释

本文大部分参考自 http://blog.csdn.net/mayingcai1987/article/details/6200909 &#xff0c;对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点&#xff0c;用红色标记 1. Task是包含一系列Activity的堆栈, 遵循先进后出原则. 2. Task默认行为: (1) 前提: Activity A和Ac…

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;这时候就可以获取到文本高…

【原创】linux 下远程连接windows桌面

一、安装过程 首先到http://www.rdesktop.org下载rdesktop 解压后进入rdesktop文件夹 执行命令&#xff1a; [rootmaster swxing]#./configure [rootmaster swxing]#make ; make install 提示没有安装openssl-devel 执行命令安装openssl-devel&#xff08;以下是在centos下用yu…

什么是.NET

Microsoft.NET 是Microsoft XML Web Service平台。 平台包含4个主要部分1.底层操作系统--Windows。 2.辅助产品--.NET企业服务器。 3.Microsoft XML Web服务--.NET My Servers。 4.开发平台--.NET框架。 CLR和FCL提供的部分服务转载于:https://www.cnblogs.com/dongdongguo/arc…

springboot + ApplicationListener

ApplicationListener自定义侦听器类 Component public class InstantiationTracingBeanPostProcessor implementsApplicationListener<ContextRefreshedEvent> {private static final Logger LOG Logger.getLogger(InstantiationTracingBeanPostProcessor.class);privat…

c语言使用小结

mallocfree typedef struct{   int a;   int b;}HA; cpp是C的扩展在大多数CPP的头文件里 CPP用到的关键字都会被条件编译扩起来以方便C的使用 当C用时CPP用到的关键字不会被编译。本质上CPP是兼容C的。 .lib .o 是程序编译时要使用的己经编译的函数库。 minGW环境可以使用.…

JAVA学习之动态代理

JDK1.6中的动态代理 在Java中Java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口&#xff0c;通过使用这个类和接口可以生成一个动态代理对象。JDK提供的代理只能针对接口做代理 java.lang.reflect.Proxy 提供用于创建动态代理类和实例的静态方法&#xff0c;…

net开源项目

1 以色列 特思开源软件 http://cn.tersus.com/#Id3924 2 开源社区 http://www.ctochina.net/ .NET开源项目链接 http://www.cnblogs.com/dustinyang/articles/361479.html项目网址简介Rainbowhttp://www.rainbowportal.net/ http://sourceforge.net/projects/rainbowportal/The…