• 前端自动化构建工具 gulp


    前端现阶段主流自动化构建工具有:grunt,gulp,webpack等,他们能对网站资源进行优化,大大提高我们的工作效率;gulp是基于NodeJS的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。让我们一起来学习gulpj简单的吧吧! ^_^

    一,NodeJS的环境搭建:

    说明:gulp是基于nodejs,理所当然需要安装nodejs;

    安装:打开NodeJS官网 -> 点击Download按钮 ->根据自身电脑系统选择对应版本(.msi文件)->傻瓜试(next)就可以了(安装路径随意)。

    二,命令行操作:

      命令行在OSX是终端(Terminal),在windows是命令提示符(Command Prompt,即开始 ->搜索cmd);

      本例操作是在windows系统下进行的,进入cmd(即:点击开始 ->搜索cmd回车);

      node -v查看安装的nodejs版本,出现版本号,说明已正确安装nodejs。PS:未能出现版本号,请尝试注销电脑重试;

      npm -v查看npm的版本号,npm是在安装nodejs时一同安装的nodejs包管理器;

      cd定位到你的项目下的目录,用法:cd + 项目路径 ;

      dir列出文件列表;

      cls清空命令提示符窗口内容。

         

    三,npm的介绍(本文结合css框架sass,和webstrom开发工具

      npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等);

      npm使用前提:基于NodeJS环境Git环境(本文不做详解)两者之上才可以使用。没有的话先安装;

      以下操作在webstrom开发工具Terminal中进行(在cmd中操作相同);

      首先,进入项目路径下;

      npm安装插件命令两种:

      全局安装:  npm install <name> [-g];

      局部安装: npm install <name> [--save-dev]

      <name>:要安装的node插件名称。例:npm install gulp -g (全局安装)

      npm install gulp -g 全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm,并且写入系统环境变量; 

      npm install gulp --save-dev 局部安装:将会安装在当前定位目录;  全局安装可以通过命令行在任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,通过require()调用;

      --save:将保存配置信息至package.json(package.json是NodeJS项目配置文件);

      -dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点;一般保存在dependencies的像这些express/ejs/body-parser等等。

      为什么要保存至package.json?因为node插件包相对来说非常庞大,所以不加入版本管理,将配置信息写入package.json并将其加入版本管理,其他开发者对应下载即可

      npm init  一直回车,初始化产生node_modules文件,package.json

      npm install,则会根据package.json下载所有需要的包,npm install --production只下载dependencies节点的包。

        package.json是一个普通json文件,所以不能添加任何注释,每安装一个插件文件中将多一个插件名及版本号。内容  如下:

     1 {
     2   "name": "gulp-demo",
     3   "version": "1.0.0",
     4   "description": "",
     5   "main": "index.js",
     6   "scripts": {
     7     "test": "echo \"Error: no test specified\" && exit 1"
     8   },
     9   "author": "",
    10   "license": "ISC",
    11   "devDependencies": {
    12     "grunt-autoprefixer": "^3.0.4",
    13     "gulp": "^3.9.1",
    14     "gulp-autoprefixer": "^3.1.1",
    15     "gulp-concat": "^2.6.0",
    16     "gulp-connect": "^5.0.0",
    17     "gulp-htmlmin": "^3.0.0",
    18     "gulp-imagemin": "^3.0.3",
    19     "gulp-minify-css": "^1.2.4",
    20     "gulp-rename": "^1.2.2",
    21     "gulp-rev": "^7.1.2",
    22     "gulp-rev-collector": "^1.0.5",
    23     "gulp-sass": "^2.3.2",
    24     "gulp-uglify": "^2.0.0"
    25   }
    26 }

      使用npm卸载插件:npm uninstall <name> [-g] [--save-dev]  PS:不要直接删除本地插件包

      删除全部插件:npm uninstall gulp-less gulp-uglify gulp-concat ……???太麻烦

      借助rimraf:npm install rimraf -g 用法:rimraf node_modules

      使用npm更新插件:npm update <name> [-g] [--save-dev]

      更新全部插件:npm update [--save-dev]

      查看npm帮助:npm help

      当前目录已安装插件:npm list

      四,gulp安装

        全局安装:npm install gulp -g

        局部(本地)安装(当前项目路径下):npm install gulp -save-dev

        查看是否正确安装:命令提示符执行gulp -v,出现版本号即为正确安装。

        全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能。

      五,新建gulpfile.js文件

        gulpfile.js是gulp项目的配置文件,是位于项目根目录的普通js文件(其实将gulpfile.js放入其他文件夹下亦可)。

      六,实例展示(结合sass框架,webstorm开发工具)

        gulpfile.js文件中的gulp常见命令

      1 var gulp = require("gulp"); //gulp核心模块
      2 var sass = require("gulp-sass");  //sass编译
      3 var server = require("gulp-connect"); //服务器
      4 var concat = require("gulp-concat"); //合并
      5 var uglify = require("gulp-uglify"); //压缩
      6 var minifyCss = require("gulp-minify-css"); //css压缩
      7 var imgmin = require("gulp-imagemin");  //图片压缩
      8 var rename = require("gulp-rename");  //对文件进行重命名
      9 var rev = require("gulp-rev"); //给静态资源添加上一个hash值后缀
     10 var revCollector = require("gulp-rev-collector");  //根据rev生成manifest用来替换html link
     11 var prefixer = require("gulp-autoprefixer"); //自动添加浏览器厂商前缀
     12 var htmlmin = require("gulp-htmlmin"); //对页面进行压缩
     13 
     14 gulp.task("default",["copyindex","copy-img","copy-data"]);
     15 
     16 //根据rev-manifest对link路径进行替换
     17 gulp.task("rev-collector",function(){
     18     return gulp.src(["dist/css/**/*.json","dist/index.html"])
     19         .pipe(revCollector({
     20             replaceReved: true,
     21         }))
     22         .pipe(gulp.dest("dist/"))
     23 
     24 })
     25 gulp.task("addPrx",function(){
     26     return gulp.src("src/css2/*.css")
     27         .pipe(prefixer({
     28             browsers: ['last 2 versions', 'Android >= 4.0'],
     29             cascade: true, //是否美化属性值 默认:true 像这样:
     30             remove:true //是否去掉不必要的前缀 默认:true
     31         }))
     32         .pipe(gulp.dest("dist/css/"))
     33 })
     34 
     35 //创建服务器
     36 gulp.task("server",function(){
     37     server.server({
     38        root:"dist"
     39     })
     40 })
     41 //js 合并
     42 gulp.task("js",function(){
     43     return gulp.src("src/js/**/*")
     44         .pipe(concat("all.js"))
     45         .pipe(gulp.dest("dist/js/"))
     46 });
     47 //合并与压缩
     48 gulp.task("js-c",function(){
     49     return gulp.src("src/script/**/*")
     50         .pipe(concat("all-c.js"))
     51         .pipe(gulp.dest("dist/js/"))
     52         .pipe(uglify())
     53         .pipe(rename("all-c-min.js"))
     54         .pipe(gulp.dest("dist/js/"))
     55 });
     56 
     57 //对css文件进行压缩
     58 gulp.task("css",function(){
     59     return gulp.src("src/css/*.css")
     60         .pipe(minifyCss())
     61         .pipe(gulp.dest("dist/css/"))
     62         .pipe(rev())
     63         .pipe(gulp.dest("dist/css/"))
     64         .pipe(rev.manifest())
     65         .pipe(gulp.dest("dist/css/"))
     66 })
     67 
     68 
     69 //<!--copy src:操作的目录 dest:目标目录-->
     70 gulp.task("copyindex",function(){
     71     return gulp.src("src/index.html")
     72         .pipe(htmlmin({
     73             minifyCSS:true,
     74             minifyJS:true,
     75             removeComments:true,
     76             collapseWhitespace:true
     77         }))
     78         .pipe(gulp.dest("dist/"))
     79 })
     80 
     81 //批量copy
     82 gulp.task("copy-img",function(){
     83     return gulp.src("src/images/**/*")
     84         .pipe(imgmin())
     85         .pipe(gulp.dest("dist/images/"))
     86 })
     87 
     88 //多组文件的操作
     89 gulp.task("copy-data",function(){
     90     return gulp.src(["src/json/*","src/xml/*","!src/json/s-*.json"])
     91         .pipe(gulp.dest("dist/data/"));
     92 })
     93 
     94 gulp.task("sass-c",function(){
     95     return gulp.src("src/scss/**/*.scss")
     96         .pipe(sass())
     97 
     98         .pipe(gulp.dest("dist/css/"))
     99 })
    100 
    101 //watch
    102 gulp.task("watch",function(){
    103     gulp.watch("src/index.html",["copyindex"]);
    104     gulp.watch("src/images/**/*",["copy-img"]);
    105     gulp.watch(["src/json/*","src/xml/*"],["copy-data"]);
    106 
    107 })

    使用方法:将项目导入webstorm,右键gulpfile.js 选择”Show Gulp Tasks”打开Gulp窗口,若出现”No task      found”,选择右键”Reload tasks”,双击运行即可。

     本文有任何错误,或有任何疑问,欢迎留言说明!

     

  • 相关阅读:
    LED事件
    CSR8670按钮事件
    编译提示:warning: ISO C89 forbids mixed declarations and code
    C#使用Smtp,通过qqmail发送邮件
    编写VS的Snippet
    WPF的Clipboard.SetText()有问题
    HttpListenerRequest.ContentEncoding
    jQuery的Deferred对象教程
    visual studio如何修改c++项目的.net framework框架版本
    如何让Sqlite支持Entity Framework Code-First
  • 原文地址:https://www.cnblogs.com/xiuhongbin/p/tiantian.html
Copyright © 2020-2023  润新知