1、简介

使用gulp搭建一个传统的多页面前端项目的开发环境

  • 支持pug scss es6编译支持
  • 支持开发环境和打包生成sourceMap
  • 支持文件变动自动刷新浏览器,css是热更新(css改动无需刷新浏览器即可更新)
  • 支持新增文件没无需重启gulp,即可改动自动刷新浏览器
  • 支持eslint,使用的eslint插件是eslint-config-alloy
  • 支持打包html,css,js图片压缩,css中小图片转base64
  • 支持css,js文件版本hash值,文件无变动则版本hash不会改变,更好利用缓存
  • 支持html中的css,js,img路径添加cdn域名前缀,css中的图片链接建议使用相对路径
  • 支持代理,便于跨域调试

2、如何使用

2.1 下载项目

(1) git clone https://github.com/lfyfly/dev-easy.git或者下载 zip包

(2)删除项目下的因此目录.git文件夹,这是我的commit记录,所以删除

(3)npm install 安装依赖

(4)npm run dev

2.2 命令

npm run dev

进入开发模式

npm run build

打包命令

npm run start

打包并且以dist为根目录开启服务器查看效果

npm run sp

把根目录下的sprites文件夹下的子目录内的所有文件夹中的png和jpg的图片,以子文件夹目录为单位生产雪碧图,文件名为子目录名

npm run lint

eslint检测

npm run fix

eslint修复

3、 约定的目录

src是源码目录,可以通过config.srcPath进行配置,以下src只目录只是个例子,代表源码目录

3.1 src/static

静态文件目录

3.2 src/static/_vendor

第三方js,css,iconfont等

3.3 src/static/_scss

scss模块目录,里面的.scss文件不会被单独编译成css文件

3.4src/static/_pug

pug模块目录,里面的.pug文件不会被单独编译成html文件

4.5 src/static/_modules

该目录里面的.pug,.scss文件不会被单独编译成html文件

4、功能配置文件

根目录下的config.js

module.exports = {
srcPath: 'src',
pug: true,
scss: true,
babel: true,
tmpPath: 'node_modules/__tmp__',
build: {
htmlmin: true,
cssmin: true,
jsmin: true,
base64: 10 * 1024, // (bytes) 使用css中图片使用相对路径,否者无效
cssSourcemap: true,
jsSourcemap: true,
cdn: 'http://your/cdn/url/',
versionHash: true, // 版本hash
},
proxyTable: {
'/api': 'http://localhost:3000',
'/hehe': {
target: 'http://localhost:3000',
pathRewrite: {
// 地址重写
'^/hehe': '/api'
}
}
}
}

5、功能配置项详解

如不需要使用某个配置项目,直接将其注释即可

srcPath

配置目录源文件目录,默认为'src'

pug

  • 值为true时,会开启对src目录内所有的.pug文件(除src/_pug/外)编译成html
  • src/_pug作为pug的模块目录,不会被单独编译为html文件

scss

  • 值为true时,会开启对src内所有的.scss,.sass文件(除src/_scss外)编译成scss
  • src/_scss/作为scss的模块目录,不会被单独编译为css文件

babel

  • 值为true时,会开启对src目录内所有的.js文件(除src/static/vendor/外)编译成es5
  • babel配置文件,根目录下.babelrc文件

tmpPath

  • 默认值为 'node_modules/__tmp__'

  • npm run dev作为.pug.scss.js文件编译的临时文件目录,和src同为静态文件目录,且优先级高于src目录

    browserSync.init({
    server: {
    baseDir: [config.tmpPath, 'src'],
    },
    middleware,
    port: 9000,
    online: false
    })
  • 编译后文件访问:src/static/public/public.scss在html的访问路径为/static/public/public.css

  • 每次运行npm run dev config.tmpPath都会被清理

打包配置项

config.build 描述
htmlmin 值为true时开启html压缩
cssmin 值为true时开启css压缩
jsmin 值为true时开启js压缩
base64 Number类型,单位(bytes),当css图片大小小于该值时将转base64

css中图片地址必须为相对路径才会生效 | | cssSourcemap | 值为true时,生成cssSourcemap文件 | | jsSourcemap | 值为true时,生成jsSourcemap文件 | | cdn | 值为你的cdn地址 | | versionHash | 值为true时,生成css js文件版本hash值 | | proxyTable | 代理配置,http-proxy-middleware |

proxyTable配置实例

  proxyTable: {
'/api': 'http://localhost:3000',
'/hehe': {
target: 'http://localhost:3000',
pathRewrite: {
// 地址重写
'^/hehe': '/api'
}
}
}

6、项目目录构建示例

6.1 Deom-0 见src目录

使用html,css,js构建项目

6.2 Deom-1 见src-1目录

使用pug(可选用),scss,js构建项目 将config.srcPath值设为src-1即可切换到该项目

7、其他

7.1 模块化?

推荐使用sea.jsrequire.js进行模块管理

7.2 为什么不在gulp中配置eslint?

推荐使用浏览器插件进行提示,还可以配置保存时自动修复eslint

7.3 js中如何判断是否为开发模式

// 当前环境为开发环境
var isDev = !!document.getElementById('__bs_script__')

注意: isDev只能在body标签内的js中这样获取,或者在DOMContenLoadedload事件回调中初始化 isDev

使用gulp搭建一个传统的多页面前端项目的开发环境的更多相关文章

  1. 内网 Ubuntu 20.04 搭建 docusaurus 项目(或前端项目)的环境(mobaxterm、tigervnc、nfs、node)

    内网 Ubuntu 20.04 搭建 docusaurus 项目(或前端项目)的环境 背景 内网开发机是 win7,只能安装 node 14 以下,而 spug 的文档项目采用的是 Facebook ...

  2. 搭建Spark源码研读和代码调试的开发环境

    转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md 搭建Spark源码研读和代码调试的开发环境 工欲善其事,必先利其 ...

  3. OpenDaylight开发hello-world项目之开发环境搭建

    OpenDaylight开发hello-world项目之开发环境搭建 OpenDaylight开发hello-world项目之开发工具安装 OpenDaylight开发hello-world项目之代码 ...

  4. gulp + webpack 构建多页面前端项目

    修改增加了demo地址 gulp-webpack-demo 之前在使用gulp和webpack对项目进行构建的时候遇到了一些问题,最终算是搭建了一套比较完整的解决方案,接下来这篇文章以一个实际项目为例 ...

  5. 亲手搭建一个基于Asp.Net WebApi的项目基础框架1

    目标:教大家搭建一个简易的前后端分离的项目框架. 目录: 1:关于项目架构的概念 2:前后端分离的开发模式 3:搭建框架的各个部分 这段时间比较闲,所以想把之前项目里用到的一些技术写到博客里来,分享给 ...

  6. 用 Eclipse 搭建一个简单的 Maven spring mybatis 项目(包含测试用例)

    1: 先搭建一个Maven项目: 创建好后的目录: 2: 配置pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0& ...

  7. 前端移动App开发环境搭建

    移动App开发环境安装 一.环境安装准备软件 二.node的安装 像安装普通软件一样,安装对应版本的node软件,安装好之后就可以运行npm命令行,比如npm init .npm install -g ...

  8. 搭建及修正Hadoop1.2.1 MapReduce Pipes C++开发环境

    Hadoop目前人气超旺,返璞归真的KV理念让人们再一次换一个角度来冷静思考一些问题. 但随着近些年来写C/C++的人越来越少,网上和官方WIKI的教程直接落地的成功率却不高,多少会碰到这样那样的问题 ...

  9. Django项目--在开发环境运行静态页面

    在项目中运行静态页面的准备工作: 开发中使用前端node.js 提供的live-server服务器作为前端开发服务器使用 linux终端中准备node环境 npm install -g live-se ...

随机推荐

  1. seo搜索优化教程05-SEO常用专业术语

    SEO常用的专业术语很多,星辉信息科技专门抽空进行了整理,主要如下:. SEO 根据搜索引擎规则来进行搜索引擎优化,进而使得在搜索结果中获得较好的排名 关键词 关键词也叫keywords,表示在搜索引 ...

  2. 小白学 Python 数据分析(15):数据可视化概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  3. ZTMap室内地图定位平台设计方案

    1   系统总体设计 1.1  系统概述 基于臻图信息室内GIS地图平台和室内定位平台,通过室内定位设备的部署和信号采集,实现对室内人员和资产的实时定位.路线导航.区域管控告警.客流统计等相关功能. ...

  4. CODING 携手优普丰,道器合璧打造敏捷最佳实践

    随着全球进入到信息化时代,越来越多的企业迫切地寻求新的商业模式,要求迭代.探索.不断加速创新以响应快速变化的市场.如今一系列新兴概念如敏捷开发.极限编程.微服务.自动化.DevOps 等大行其道,然而 ...

  5. mysql(8.0连接navicat发生的错误解决方法)

    关于mysql(8.0连接navicat发生的错误解决方法)数据库安装图形化界面无法更改加密的方式导致无法连接问题为解决; Alter user 'root'@'localhost' identifi ...

  6. 手机抓包app在python中使用

    使用python+airtesr+无线模式控制手机 官方文档中,在airtest.readthedocs.io/zh_CN/lates…有一段介绍如何连接安卓手机的例子: 但是这个线接模板,无线模式的 ...

  7. AspNetCore3.1源码解析_2_Hsts中间件

    title: "AspNetCore3.1源码解析_2_Hsts中间件" date: 2020-03-16T12:40:46+08:00 draft: false --- 概述 在 ...

  8. Element UI中的上传文件功能

    上传文件给后台: <el-upload style="display:inline-block" :limit=" class="upload-demo& ...

  9. H5页面,输入框的光标,如果页面上下滑动光标停留在页面上,除了输入框外,松手过了一段时间才跑回输入框里面

    有点类似这种情况 其中一个博主描述得比较详细,主要还有图 我是直接在App.vue主文件那里添加一下代码,主要是添加一个监听器,如果touchmove的时候就会触发让其失焦,就会消失那个光标,需要再次 ...

  10. Python下载各种功能包出问题

    问题详情 点击之后出现 AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 解决方法 c ...