Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我的前端工作流

我的前端工作流

作者头像
零式的天空
发布于 2022-03-22 03:16:29
发布于 2022-03-22 03:16:29
77100
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

摩登时代

在 Node.js 出现以前,以往的前端开发工作属于石器时代。而随着前端技术的大爆炸来临,我们需要赶上这一次潮流,加入到前端开发到摩登时代去。这篇博文主要是记录如何构建前端工作流。

开始

先要具备Node.js的环境,安装NPM管理工具 全局安装gulp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install gulp -g

package.json

npm通过package.json文件来管理依赖。 先进入的项目目录, 执行下面命令,一路回车即可。会生成名为package.json的文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm init

导入包

这个我构建好的json文件,将devDependencies下的所有节点复制过去。 package.json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name": "ba",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "browser-sync": "^2.12.5",
    "coffee-script": "^1.10.0",
    "del": "^2.2.0",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^3.1.0",
    "gulp-cache": "^0.4.4",
    "gulp-concat": "^2.6.0",
    "gulp-html-extend": "^1.1.6",
    "gulp-imagemin": "^2.4.0",
    "gulp-jshint": "^2.0.0",
    "gulp-livereload": "^3.8.1",
    "gulp-minify-css": "^1.2.4",
    "gulp-minify-html": "^1.0.6",
    "gulp-notify": "^2.2.0",
    "gulp-rename": "^1.2.2",
    "gulp-ruby-sass": "^2.0.6",
    "gulp-sitemap": "^4.1.1",
    "gulp-uglify": "^1.5.3",
    "gulp-watch": "^4.3.5",
    "jshint": "^2.9.2"
  },
  "description": ""
}

完成之后安装这些包,版本如果有更新,去掉版本号默认会安装最稳定版本。安装时间视网络情况机器性能而定。首次安装时间比较长。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install

构建项目

在当前目录下创建source文件夹同时为其创建子目录,如下结构, 其中views目录下layouts用于视图模版,application用于视图文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+ node_modules
- source
    + img
    + js
    + scss
    - views
        + application
        + layouts
        
  gulpfile.coffee
  pacakge.json

构建模版

视图模版使用gulp-html-extend进行解析,使用方法及配置可参考其官方文档。 在layouts目录创建以下文件,如果有多套模版可以在layouts下创建子目录区分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- source
    + img
    + js
    + scss
    - views
        + application
        - layouts
            _meta.html
            _link.html
            _script.html
            _header.html
            _footer.html
            default.html

@@include可将需要的局部模版导入 @@placeholder可配置模版内容,下面例子会给出。 source/layouts/default.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <!-- @@placeholder= title -->

    <!-- @@include ./_meta.html -->

    <!-- @@include ./_link.html -->

    <!-- @@include ./_script.html -->
</head>
<body>
  <div id="Wrapper">
    <!-- @@include ./_header.html -->

    <!-- @@placeholder= content -->

    <!-- @@include ./_footer.html -->
  </div>
</body>
</html>

在此配置meata标签 source/layouts/_meta.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />

在此配置link的内容,如css,font,icon等 source/layouts/_link.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<link type="image/x-icon" rel="shortcut icon" href="/img/favicon.ico">
<link href="/css/style.css" type="text/css" rel="stylesheet" media="all" />

在此配置需要的js文件 source/layouts/_script.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="/js/jquery-1.11.1.min.js" type="text/javascript"></script>
<script src="/js/index.js" type="text/javascript"></script>

在此配置头部内容 source/layouts/_header.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="page-header">
  我是头部
</div>

在此配置底部内容 source/layouts/_footer.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="page-footer">
    我是底部
</div>

到目前为止已经构建好视图模版了。

使用模版

application目录新建index.html文件 @@master指定模版文件 @@block自定义开始块 @@close自定义结束块 source/views/application

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- @@master = ../layouts/default.html-->

<!-- @@block = title-->
<title>我是标题</title>
<!-- @@close-->

<!-- @@block = content-->
<div class="main">
    我是内容
</div>
<!-- @@close-->

生成的文件内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <title>我是标题</title>

    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />

    <link type="image/x-icon" rel="shortcut icon" href="/img/favicon.ico">
    <link href="/css/style.css" type="text/css" rel="stylesheet" media="all" />

    <script src="/js/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/js/index.js" type="text/javascript"></script>
</head>
<body>
  <div id="Wrapper">
    <div class="page-header">
      我是头部
    </div>

    <div class="main">
        我是内容
    </div>

    <div class="page-footer">
        我是底部
    </div>
  </div>
</body>
</html>

建立task

完成模版构建之后,我们需要对网页对静态资源使用gulp进行处理。 下面是我对gulp任务,使用CoffeeScript,然后我会讲解一个任务。有一点需要注意的地方,gulp-ruby-sass需要有ruby语言环境,这是安装传送门Ruby,一般Mac会自带Ruby。

gulpfile.coffee

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gulp         = require('gulp')
del          = require('del')
cache        = require('gulp-cache')
uglify       = require('gulp-uglify')
concat       = require('gulp-concat')
jshint       = require('gulp-jshint')
broeserSync  = require('browser-sync')
sitemap      = require('gulp-sitemap')
imagemin     = require('gulp-imagemin')
sass         = require('gulp-ruby-sass')
minifycss    = require('gulp-minify-css')
extender     = require('gulp-html-extend')
minifyHTML   = require('gulp-minify-html')
autoprefixer = require('gulp-autoprefixer')

gulp.task 'browser-sync', ['rebuild'], ->
  broeserSync({
    server: {
      baseDir: './dist/'
    },
    port: 8080,
    host: '0.0.0.0',
    ui: {
      port: 8081
    }
  })

gulp.task 'rebuild', ->
  broeserSync.reload()

gulp.task 'watch', ->
  gulp.watch(['./dist/**/*.*'], ['rebuild'])
  gulp.watch(['./source/**/*.html'], ['extend'])
  gulp.watch(['./source/**/*.scss'], ['styles'])
  gulp.watch(['./source/**/*.js'], ['js'])
  gulp.watch(['./source/**/*.jpg','./source/**/*.png'], ['image'])


gulp.task 'styles', -> 
  return sass('./source/scss/**/*.scss', { style: 'compressed' })
  .pipe autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')
  .pipe concat('style.css')
  .pipe minifycss()
  .pipe gulp.dest('./dist/css/')

gulp.task 'extend', -> 
  gulp.src('./source/views/application/**/*.html') 
  .pipe extender({annotations:false,verbose:false})
  .pipe minifyHTML()
  .pipe gulp.dest('./dist/')

gulp.task 'js', -> 
  gulp.src('./source/**/*.js') 
  .pipe uglify()
  .pipe gulp.dest('./dist/')

gulp.task 'image', -> 
  gulp.src(['./source/**/*.jpg','./source/**/*.png']) 
  .pipe cache(imagemin({optimizationLevel: 3, progressive: true, interlaced: true}))
  .pipe gulp.dest('./dist/')

gulp.task 'clean', -> 
  del ['./dist/css','./dist/js','./dist/gallery', './dist/img', './dist/**/*.html']

gulp.task 'sitemap', ->
    gulp.src('dist/**/*.html', { read: false })
        .pipe sitemap({ siteUrl: 'http://yulive.cn' })
        .pipe gulp.dest('./dist/')

gulp.task 'build', ['styles', 'js', 'image', 'extend']

gulp.task 'default', ['browser-sync', 'watch']

styles任务,会将scss目录下的样式文件编译成css,然后autoprefixer方法会自动添加不同浏览器的前缀,concat合并成一个文件style.css后会使用minifycss压缩,最后输出到指定到目录gulp.dest。如果能看懂这个任务其他也都ok了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gulp.task 'styles', -> 
  return sass('./source/scss/**/*.scss', { style: 'compressed' })
  .pipe autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4')
  .pipe concat('style.css')
  .pipe minifycss()
  .pipe gulp.dest('./dist/css/')

extend任务会将模版文件解析并生成相应的html js压缩js image对图片资源进行无损压缩 clean清空编译目录 sitemap生成站点地图,便于SEO watch监听文件,当发生改动时调用相应的任务 build用于构建编译文件 default默认任务,使用gulp命令执行的任务 browser-sync用于开发环境实时更新页面,免去手动刷新的烦恼 rebuild当资源文件更新时让browser-sync重新加载变更

完成这些之后,可以使用gulp + 任务名称执行相应的任务

结束语

这是我的前端工作流,构建静态页面速度是不是一下子就提升了呢。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
给初学者的Gulp教程(译)
Gulp是一个在你开发web时,帮助你完成几个任务的工具。它经常用来进行一些前端任务,比如:
治电小白菜
2020/08/25
4.6K0
给初学者的Gulp教程(译)
从零开始构建你的 Gulp
图片 本篇博文的内容根据 Introduction to Gulp.js 系列文章 拓展而来,其代码、依赖包及目录结构部分均有所更改,更多详细内容,敬请参考
Nian糕
2018/08/21
1.2K0
从零开始构建你的 Gulp
node和gulp实现前端工程自动化(附:gulp常用插件)
/** * 1. LESS编译 压缩 合并 * 2. JS合并 压缩 混淆 * 3. img复制 * 4. html压缩 */
HUC思梦
2020/09/03
5500
在前端中理解MVC服务之TypeScript篇
通过开发一个网页应用来理解构建前端应用的方法,其中,使用JavaScript作为脚本语言,并转向使用JavaScript/TypeScript作为面向对象程序开发的语言
学前端
2020/04/07
2.1K0
基于gulp的前端自动化方案
本文需要安装node(自行安装),并了解过gulp入门。gulp脚本下载:https://github.com/youhunwl/gulp 欢迎star。
游魂
2018/10/25
1.1K0
基于gulp的前端自动化方案
gulp入门(小白级别)
在该项目路径下,我们独立安装gulp:npm install gulp 。此时会生成一个 node_modules 文件夹和一个 package-lock.json 文件,如下图:
celineWong7
2020/11/05
1.4K0
gulp的安装和使用
安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务 1、去nodejs官网安装nodejs 2、打开命令行,OSX是终端,windows是命令提示符(window + r 输入cmd回车) 3、使用npm(nodejs的包管理器),或选装cnpm执行npm install cnpm -g --registry=https://registry.npm.taobao.org 4、全局安装gulp:(c)npm install gu
小古哥
2018/03/08
1.3K0
Django打造大型企业官网(二) 三、项目环境搭建
三、项目环境搭建 3.1.创建项目环境和安装包 创建django项目 mkvirtualenv DjangoProject workon DjangoProject pip install -i https://pypi.douban.com/simple django==2.0.2 进front目录 npm init #初始化一个package.json配置文件文件 在package.json文件中添加要安装的包 "devDependencies": { "browser-sync":
zhang_derek
2019/06/14
1.3K0
Django打造大型企业官网(二)
		三、项目环境搭建
Express+Less+Gulp配置高效率开发环境
金朝麟
2017/02/08
2.2K0
Express+Less+Gulp配置高效率开发环境
gulp
简单介绍 gulp是基于node开发的所以可以使用npm这个nodejs的包管理工具安装gulp,使用npm首先得配置node环境
河湾欢儿
2018/09/06
1.1K0
快速搭建gulp项目实战
gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。
小周sir
2019/09/23
1.2K0
快速搭建gulp项目实战
gulp+webpack工作流探索
最近研究了下工作流,先说一下我司的情况,我司现在是pc端用php直出,h5用vuejs构建,vuejs部分就不进行描述了,因为网上的构建方法都是很成熟的了。 以下是php直出,需要向后台同学提供html文件的构建方法。调试都是在本地调试的,调试完成后打包生成html交付给后台同学。
Ganother
2019/02/26
1.4K0
Gulp-自动化编译sass和pug文件
突然发现在我博客文章中,缺少这一块的记录,那我就补一篇吧。 gulp的环境配置和安装:http://www.cnblogs.com/padding1015/p/7162024.html 这里就补充一篇gulpfile.js的配置,用于自动化编译sass和pug文件用: 1 var gulp = require('gulp'); 2 var pug = require('gulp-pug'); 3 var sass = require('gulp-sass'); 4 var rename = requ
xing.org1^
2018/05/17
9960
Gulp探究折腾之路(I)
前言: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。相比于grunt的频繁 IO 操作,gulp的流操作,能更快地更便捷地完成构建工作。此处仅记录初步折腾中所遇点滴以及待解决的点。 Gulp折腾之初探 折腾之战略上的藐视 回过头看Gulp的折腾历程,使用还是非常简易的。初步入门资料可参考这里。所以战略上一定要藐视”她”;当然战术上要
晚晴幽草轩轩主
2018/03/27
1.9K0
前端工程化 | 定制专属提速“外挂”(上)
友情提示:推荐阅读时间15分钟 + 练习时间15分钟 HTML5学堂:上一期给大家分享了Gulp的安装与使用,让大家对Gulp有着初步的认识。咱们学习使用Gulp的目的是提升开发效率,把开发过程中重复性的工作交给Gulp,让Gulp按照你的配置去完成操作。 Gulp本身给开发者提供了5个API接口,可以根据这些接口来开发Gulp插件。但是,Gulp目前拥有丰富的插件资源,开发人员可以根据项目的需求和个人偏好来配置使用这些插件,比如可以配置当修改了HTML文件浏览器自动刷新,也可以配置修改了CSS文件浏览器自
HTML5学堂
2018/03/13
1.1K0
前端工程化 | 定制专属提速“外挂”(上)
前端工程化篇之 Gulp
gulp 是一个构建工具,基于Node.js的平台运行,使用的是commonJs的模块化语法。 我们使用gulp需要用到的包 一个TASK任务,对应一个包,对应一个处理逻辑、 gulp.series对应的是同步任务,从左到右,依次执行任务。时间长 gulp.parallel对应的是异步任务,效率高,时间短。 gulp.src 表明文件从哪里读取 gulp.dest 表明文件输出到哪 const gulp = require('gulp'); //gulp的包 const eslint = req
Peter谭金杰
2019/08/02
1.4K1
Django打造大型企业官网(一) 一、nvm的安装二、gulp的安装和用法
         C:\Users\Administrator\AppData\Roaming\nvm
zhang_derek
2019/06/14
1.1K0
Django打造大型企业官网(一)
		一、nvm的安装二、gulp的安装和用法
Gulp 在金蝶云平台项目中的使用经验
金蝶云平台
2017/06/12
1.8K0
Gulp 在金蝶云平台项目中的使用经验
如何为你的微信小程序瘦身?
众所周知,微信小程序在发布的时候,对提交的代码有1M大小的限制!所以,如果你正在写一个功能稍微复杂一点的小程序,就必须得时刻小心注意你的代码是不是快触及这个底线了。
一斤代码
2018/08/21
7620
Error: Cannot find module 'gulp-clone'问题的解决
安装完gulp环境,并且配置好gulpfile.js,执行静态文件压缩和代码混淆时,出现如下错误: Error: Cannot find module 'gulp-clone' Error: Cann
程序员十三
2018/03/15
1.5K0
Error: Cannot find module 'gulp-clone'问题的解决
相关推荐
给初学者的Gulp教程(译)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档