亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

基于Node.js的JavaScript項目構建工具gulp的使用教程

2019-11-20 09:58:43
字體:
來源:轉載
供稿:網友
npm install gulp --save-dev 

什么是gulp?
gulp是新一代的前端項目構建工具,你可以使用gulp及其插件對你的項目代碼(less,sass)進行編譯,還可以壓縮你的js和css代碼,甚至壓縮你的圖片,gulp僅有少量的API,所以非常容易學習。 gulp 使用 stream 方式處理內容。Node催生了一批自動化工具,像Bower,Yeoman,Grunt等。

gulp和grunt的異同點
易于使用:采用代碼優于配置策略,Gulp讓簡單的事情繼續簡單,復雜的任務變得可管理。
高效:通過利用Node.js強大的流,不需要往磁盤寫中間文件,可以更快地完成構建。
高質量:Gulp嚴格的插件指導方針,確保插件簡單并且按你期望的方式工作。
易于學習:通過把API降到最少,你能在很短的時間內學會Gulp。構建工作就像你設想的一樣:是一系列流管道。
因為gulp是用node.js寫的,所以你需要在你的終端上安裝好npm。npm是node.js的包管理器,所以先在你的機子上安裝好node.js吧。

gulp安裝命令

sudo npm install -g gulp

在根目錄下新建package.json文件

npm init .

安裝gulp包

安裝好后再次輸入gulp -v查看版本號,如下圖顯示則為成功:

2016520182145165.jpg (570×166)

安裝插件
安裝常用插件:

sass的編譯                  (gulp-ruby-sass)
自動添加css前綴              (gulp-autoprefixer)
壓縮css                    (gulp-minify-css)
js代碼校驗                  (gulp-jshint)
合并js文件                  (gulp-concat)
壓縮js代碼                  (gulp-uglify)
壓縮圖片                    (gulp-imagemin)
自動刷新頁面                 (gulp-livereload)
圖片緩存,只有圖片替換了才壓縮  (gulp-cache)
更改提醒                    (gulp-notify)
清除文件                    (del)
安裝這些插件需要運行如下命令:

復制代碼 代碼如下:

$ npm install gulp-ruby-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev


-save和-save-dev可以省掉你手動修改package.json文件的步驟。

npm install module-name -save

 自動把模塊和版本號添加到dependencies部分

npm install module-name -save-dev 

自動把模塊和版本號添加到devdependencies部分
gulp命令
你僅僅需要知道的5個gulp命令

gulp.task(name[, deps], fn) 定義任務  name:任務名稱 deps:依賴任務名稱 fn:回調函數

gulp.run(tasks...):盡可能多的并行運行多個task

gulp.watch(glob, fn):當glob內容發生改變時,執行fn

gulp.src(glob):置需要處理的文件的路徑,可以是多個文件以數組的形式,也可以是正則

gulp.dest(path[, options]):設置生成文件的路徑
glob:可以是一個直接的文件路徑。他的含義是模式匹配。
gulp將要處理的文件通過管道(pipe())API導向相關插件。通過插件執行文件的處理任務。

gulp.task('default', function () {...});

gulp.task這個API用來創建任務,在命令行下可以輸入$ gulp [default],(中括號表示可選)來執行上面的任務。

gulp官方API文檔:https://github.com/gulpjs/gulp/blob/master/docs/API.md

gulp 插件大全:http://gulpjs.com/plugins/
開始構建項目
在項目根目錄下新建一個gulpfile.js文件,粘貼如下代碼:

//在項目根目錄引入gulp和uglify插件var gulp = require('gulp');var uglify = require('gulp-uglify');gulp.task('compress',function(){  return gulp.src('script/*.js')  .pipe(uglify())  .pipe(gulp.dest('dist'));});

注:gulpfile.js文件名不可更改。
項目需要用到uglify和rename插件,執行以下命令安裝:

npm install --save-dev gulp-uglifynpm install --save-dev gulp-rename

以我的為例,進入gulpfile.js所在目錄:

cd /Users/trigkit4/gulp-test

然后輸入:

var gulp = require('gulp');var uglify = require('gulp-uglify');var rename = require('gulp-rename');gulp.task('compress',function(){  return gulp.src('script/*.js')  .pipe(uglify())  .pipe(rename('jquery.ui.min.js'))  .pipe(gulp.dest('dist'));});

該命令會安裝package.json下的全部依賴,如下圖所示:

2016520182629058.jpg (800×319)

完整的gulpfile.js

// 載入外掛var gulp = require('gulp'),   sass = require('gulp-ruby-sass'),  autoprefixer = require('gulp-autoprefixer'),  minifycss = require('gulp-minify-css'),  jshint = require('gulp-jshint'),  uglify = require('gulp-uglify'),  imagemin = require('gulp-imagemin'),  rename = require('gulp-rename'),  clean = require('gulp-clean'),  concat = require('gulp-concat'),  notify = require('gulp-notify'),  cache = require('gulp-cache'),  livereload = require('gulp-livereload'); // 樣式gulp.task('styles', function() {  return gulp.src('src/styles/main.scss')  .pipe(sass({ style: 'expanded', }))  .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))  .pipe(gulp.dest('dist/styles'))  .pipe(rename({ suffix: '.min' }))  .pipe(minifycss())  .pipe(gulp.dest('dist/styles'))  .pipe(notify({ message: 'Styles task complete' }));}); // 腳本gulp.task('scripts', function() {  return gulp.src('src/scripts/**/*.js')  .pipe(jshint('.jshintrc'))  .pipe(jshint.reporter('default'))  .pipe(concat('main.js'))  .pipe(gulp.dest('dist/scripts'))  .pipe(rename({ suffix: '.min' }))  .pipe(uglify())  .pipe(gulp.dest('dist/scripts'))  .pipe(notify({ message: 'Scripts task complete' }));}); // 圖片gulp.task('images', function() {  return gulp.src('src/images/**/*')  .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))  .pipe(gulp.dest('dist/images'))  .pipe(notify({ message: 'Images task complete' }));}); // 清理gulp.task('clean', function() {  return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {read: false})  .pipe(clean());}); // 預設任務gulp.task('default', ['clean'], function() {   gulp.start('styles', 'scripts', 'images');}); // 看守gulp.task('watch', function() {  // 看守所有.scss檔 gulp.watch('src/styles/**/*.scss', ['styles']);  // 看守所有.js檔 gulp.watch('src/scripts/**/*.js', ['scripts']);  // 看守所有圖片檔 gulp.watch('src/images/**/*', ['images']);  // 建立即時重整伺服器 var server = livereload();  // 看守所有位在 dist/ 目錄下的檔案,一旦有更動,便進行重整 gulp.watch(['dist/**']).on('change', function(file) {  server.changed(file.path); }); });

注:pipe()是stream模塊里傳遞數據流的一個方法,第一個參數為插件方法,插件會接收從上游流下的文件,進行處理加工后,再往下流。

gulp.task('任務名稱', function () {  return gulp.src('文件路徑')    .pipe(...)    .pipe(...)    // 直到任務的最后一步    .pipe(...);});


gulp插件
gulp-gh-pages:使用gulp來把markdown生成html文檔并上傳到git pages上
https://github.com/shinnn/gulp-gh-pages

var gulp = require('gulp');var ghPages = require('gulp-gh-pages');gulp.task('deploy', function() { return gulp.src('./dist/**/*')  .pipe(ghPages());});


gulp-jade插件:將jade編譯成html文件
gulp-less插件:將less編譯成css文件

var less = require('gulp-less');var path = require('path'); gulp.task('less', function () { return gulp.src('./less/**/*.less')  .pipe(less({   paths: [ path.join(__dirname, 'less', 'includes') ]  }))  .pipe(gulp.dest('./public/css'));});gulp-live-server 插件:方便的,輕量級的服務器var gulp = require('gulp'); var gls = require('gulp-live-server'); gulp.task('serve', function() { //1. serve with default settings var server = gls.static(); //equals to gls.static('public', 3000); server.start(); //2. serve at custom port var server = gls.static('dist', 8888); server.start(); //3. serve multi folders var server = gls.static(['dist', '.tmp']); server.start(); //use gulp.watch to trigger server actions(notify, start or stop) gulp.watch(['static/**/*.css', 'static/**/*.html'], function (file) {  server.notify.apply(server, [file]); });});

gulp-livereload,可以實時保存刷新,那樣就不用按F5和切換界面了
gulp-load-plugins:在你的package.json文件中自動加載任意的gulp插件

$ npm install --save-dev gulp-load-plugins

例如一個給定的package.json文件如下:

{  "dependencies": {    "gulp-jshint": "*",    "gulp-concat": "*"  }}

在gulpfile.js中添加如下代碼:

var gulp = require('gulp');var gulpLoadPlugins = require('gulp-load-plugins');var plugins = gulpLoadPlugins();plugins.jshint = require('gulp-jshint');plugins.concat = require('gulp-concat');

gulp-babel:gulp 的babel插件,

$ npm install --save-dev gulp-babel babel-preset-es2015

使用方法:

const gulp = require('gulp');const babel = require('gulp-babel');gulp.task('default', () => {  return gulp.src('src/app.js')    .pipe(babel({      presets: ['es2015']    }))    .pipe(gulp.dest('dist'));});

官方github: https://github.com/gulpjs/gulp

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美自拍| 久久夜色精品亚洲噜噜国产mv| 午夜精品久久久久久99热| 欧美乱人伦中文字幕在线| 亚洲欧美自拍一区| 91干在线观看| 日韩中文字幕视频在线| 91高潮精品免费porn| 欧美第一页在线| 国产精品成人va在线观看| 亚洲国产小视频在线观看| 欧美电影在线观看高清| 亚洲国产成人久久综合| 色吧影院999| 97在线观看免费高清| 日韩免费在线观看视频| 国产精品aaaa| 国产精品旅馆在线| 久久91精品国产91久久久| 亚洲欧美变态国产另类| 国产精品激情自拍| 91视频免费在线| 中文字幕亚洲欧美日韩2019| 另类美女黄大片| 奇米四色中文综合久久| 国产精品免费一区二区三区都可以| 久久久久久久电影一区| 88国产精品欧美一区二区三区| 欧美一区二区三区图| 高跟丝袜一区二区三区| 久久国产精品免费视频| 不用播放器成人网| 亚洲变态欧美另类捆绑| 久久成人18免费网站| 伊人伊成久久人综合网小说| 一二美女精品欧洲| 欧美日韩亚洲视频一区| 久久久久国色av免费观看性色| 视频在线观看一区二区| 色综久久综合桃花网| 亚洲欧美日韩中文在线制服| 日韩av色综合| 欧美一级成年大片在线观看| 亚洲iv一区二区三区| 国产精品99久久久久久人| 国产亚洲美女精品久久久| 中文字幕亚洲第一| 国产精品成人久久久久| 欧美国产极速在线| 91av在线网站| 国产欧美日韩精品丝袜高跟鞋| 精品久久久久久亚洲精品| 大桥未久av一区二区三区| 亚洲欧美日韩在线一区| 永久555www成人免费| 亚洲电影免费观看高清完整版在线| 欧洲美女免费图片一区| 成人精品一区二区三区电影黑人| 清纯唯美亚洲综合| 国产成人精品国内自产拍免费看| 日韩电影中文字幕在线观看| 欧美日韩国产成人在线观看| 亚洲综合在线中文字幕| 久久夜精品香蕉| 亚洲精选在线观看| 91成人天堂久久成人| 国产91精品最新在线播放| 日韩精品高清视频| 久久亚洲电影天堂| 欧美激情一级精品国产| 欧美精品videossex性护士| 国产精品com| 久久影视电视剧免费网站清宫辞电视| 国产精品日韩在线观看| 国产精品偷伦免费视频观看的| 欧美日韩国产丝袜美女| 欧美成人在线免费| 国产精品ⅴa在线观看h| 欧美老女人在线视频| 国产欧美日韩精品在线观看| 欧美另类69精品久久久久9999| 国产精品久久久久久久9999| 国产成人极品视频| 国产女同一区二区| 国产精品影片在线观看| 97超碰色婷婷| 欧美一区二区大胆人体摄影专业网站| 4438全国亚洲精品在线观看视频| 国产精品一区二区三区久久| 精品视频偷偷看在线观看| 久久人人爽亚洲精品天堂| 亚洲福利视频网站| 伊人久久久久久久久久久| 国产精品永久免费| 亚洲精品福利免费在线观看| 日韩电影视频免费| 欧美裸体xxxx极品少妇软件| 亚洲男女自偷自拍图片另类| 91亚洲永久免费精品| 国内精品久久久久| 一区二区三区回区在观看免费视频| 欧美亚洲午夜视频在线观看| 91av免费观看91av精品在线| 国产精品96久久久久久又黄又硬| 亚洲精品在线91| 日韩成人激情影院| 国产精品91久久久| 久久成人av网站| 欧美中文字幕在线播放| 久久夜色精品亚洲噜噜国产mv| 国产日韩精品在线播放| 久久99精品久久久久久噜噜| 91久久精品久久国产性色也91| 91社区国产高清| 日韩在线观看免费高清完整版| 亚洲国产精品成人va在线观看| 国色天香2019中文字幕在线观看| 久久久久久久久久久91| 亚洲国产精品999| 欧美精品video| 国产精品自产拍在线观看| 国产丝袜一区二区三区免费视频| 中文字幕久久亚洲| 久久影视电视剧免费网站清宫辞电视| 美女福利精品视频| 高潮白浆女日韩av免费看| 午夜精品久久久久久久99黑人| 国产精品99久久99久久久二8| 欧美日本在线视频中文字字幕| 人妖精品videosex性欧美| 日韩av免费在线| 91中文在线视频| 欧美日韩国产123| 久久6免费高清热精品| 国产91精品黑色丝袜高跟鞋| 曰本色欧美视频在线| 国产精品一区二区电影| 国产精品69精品一区二区三区| 精品久久久久久久久中文字幕| 色www亚洲国产张柏芝| 97在线精品国自产拍中文| 中文字幕成人在线| 91中文字幕在线观看| 日韩免费在线播放| 久久视频这里只有精品| 亚洲成人av在线播放| 欧美在线一级视频| 色哟哟网站入口亚洲精品| 奇门遁甲1982国语版免费观看高清| 国产精品福利网| 国产日韩在线视频| 日本国产高清不卡| 亚洲全黄一级网站| 亚洲女人被黑人巨大进入al| 精品欧美国产一区二区三区| 国产成人综合久久| 亚洲精品有码在线| 国产精品久久久久久久电影| 91精品久久久久久久久| 亚洲欧美日韩一区在线| 最好看的2019年中文视频| 久久婷婷国产麻豆91天堂| 日韩av资源在线播放| 成人久久久久久久|