博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于流的自动化构建工具------gulp (简单配置)
阅读量:5311 次
发布时间:2019-06-14

本文共 10192 字,大约阅读时间需要 33 分钟。

项目上线也有一阵子,回头过来看了看从最初的项目配置到开发的过程,总有些感慨,疲软期,正好花点时间,看看最初的配置情况

随着前端的发展,前端工程化慢慢成为业内的主流方式,项目开发的各种构建工具,也出现了不少,如:grunt,gulp,webpack,百度团队的fis3等,在前端的领域都占有自己的一席之地,webpack可以说是后起之秀,加之vuejs,reactjs,angularjs等MVVM框架的出现,配合webpack开发,成为业内常见的一种开发模式

在公司项目开发的时候,选用了gulp+webpack进行配合开发,正好写写总结算是复习吧

gulp传送门 :——>

       ——>   

webpack官网:——>

          ——> 

在官网可以学习最基础的基本配置,在网上也可以找到一些大神的分享

gulp的思想是基于流的思想,进行构建工具,类似管道的结构,由于gulp是基于node,所以在开发进行配置之前,首先要安装nodejs才能进行配置

 

进入到项目的根目录,在根目录下执行命令行命令初始化项目:

npm init

在项目的根目录,我们可以看到会出现一个名为:package.json的文件,是整个项目的项目信息清单

同时在项目根目录下新建一个gulpfile.js文件,开始配置gulp文件

一些gulp的基本语法结构,可以在gulp的api文档中可以查找到 -->

其中包括gulp常使用的关键字:src,dest,watch,pipe,task等   

准备工作做好之后,开始进行配置:

gulp:   

需要先全局安装gulp

npm install gulp -g

完成之后,在配置项目中安装gulp

npm install gulp --save-dev

需要注意的是,在后面添加 --sav-dev,才能将安装的gulp的信息,添加到package.json清单文件当中

安装完成之后,在配置文件gulpfile.js中引入gulp模块

var gulp = require('gulp');

sass:  

在sass的配置的时候,首先要全局安装基于ruby的sass编译环境,在命令行中要安装:

npm install ruby -gnpm install gulp-sass -gnpm install gulp-sass

安装完成之后,开始配置gulp中sass的配置

var sass = require("gulp-sass");                    //编译sass// gulp-sassvar sassSrc = [    './src/styles/style.scss'];//新建编译sass文件的gulp任务gulp.task('sass',function(){    return gulp.src(sassSrc)    .pipe(sass()).pipe( gulp.dest( './klm/styles/' ) );});

webserver:

基于gulp还可以配置前端自己本地的服务器,在后端没有开发接口出来之前,可以自己配置mock数据

配置代码如下:

//mockApi//配置mock数据的路径var mockbase = path.join(__dirname, './mock');var mockApi = function(res, pathname, paramObj, next) {    switch (pathname) {        case '/api/vote':            var data = fs.readFileSync(path.join(mockbase, 'classify.json'), 'utf-8');            res.setHeader('Content-Type', 'application/json');            res.setHeader('Content-type', 'application/javascript');            res.end(data);            // console.log(typeof data);            // console.log(paramObj.callback);            return ;        default:    }    next();};gulp.task('webserver', function () {    gulp.src( './' ) // 服务器目录(./代表根目录)      .pipe(webserver({ // 运行gulp-webserver        livereload:true, // 启用LiveReload        port:1000,        // open: true // 服务器启动时自动打开网页        //middleware为处理数据的中间件        middleware: function(req, res, next) {                var urlObj = url.parse(req.url, true),                    method = req.method,                    paramObj = urlObj.query;                // mock数据                mockApi(res, urlObj.pathname, paramObj, next);            }      }));});

webpack: 

gulp还可以结合webpack对js组件进行按需加载,webpack对于js模块化的开发思想,有着很强的支持,和gulp结合可以相互弥补,解决很多相互之间的补足之处,

webpack作为近两年前端项目构建工具的后起之秀,到成为主流,和行业的发展离不开,学习webpack使用到项目当中,能提高开发效率等,webpack官网有着详细的入门教程,

需要学习的同学,可以在上面的官网传送门,到官网去学习

// 要进行自动化的文件var jsFiles = [    './src/scripts/entry.js'];gulp.task("packjs",function(){    return gulp.src(jsFiles)       .pipe(webpack({         //插件项        //  plugins: [        //      new HtmlWebpackPlugin({
// title: 'jquery', // filename: './jquery.js' // }) // ], //输入 entry: { app:jsFiles //文件引入路径 }, output: { path:"", //输出路径 // publicPath: 'http://mycdn.com/', //cdn filename: 'bundle.js' }, // 新添加的module属性 module: { loaders: [ //.css 文件使用 style-loader 和 css-loader 来处理 { test: /\.css$/, loader: 'style-loader!css-loader' }, //.js 文件使用 jsx-loader 来编译处理 { test: /\.js$/, loader: 'jsx-loader?harmony' }, // vue加载器 // {test: /\.vue$/,loader: 'vue'}, //.scss 文件使用 style-loader、css-loader 和 sass-loader 来编译处理 { test: /\.scss$/, loader: 'style!css!sass?sourceMap'}, //图片文件使用 url-loader来处理,小于8kb的直接转为base64 { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}, {test: /\.html$/, loader: 'html'} ] }, //其它解决方案配置 resolve: { root: 'E:/akari丶/workspace/gulp-webpack', //绝对路径 extensions: ['', '.js', '.json', '.scss'], alias: { // AppStore : 'js/stores/AppStores.js', // ActionType : 'js/actions/ActionType.js', // AppAction : 'js/actions/AppAction.js' } } })) //输出路径 .pipe(gulp.dest('./klm/js'));});

同时,在安装多个模块的时候,我们可以类似这样的安装:

npm install gulp gulp-sass webpack --save-dev

下面这些是我自己自己的配置文件:

var gulp = require('gulp');var concat = require('gulp-concat');                //文件管道var stripDebug = require('gulp-strip-debug');       //调试工具var uglify = require('gulp-uglify');                //丑化var autoprefix = require('gulp-autoprefixer');      //浏览器内核名称前缀var minifyCSS = require('gulp-minify-css');         //压缩cssvar connect = require('gulp-connect');              //服务器连接var livereload = require('gulp-livereload');        // 网页自动刷新(服务器控制客户端同步刷新)var webserver = require('gulp-webserver');          // 本地服务器var jshint = require('gulp-jshint');                //检测js是否存在错误var sass = require("gulp-sass");                    //编译sassvar named = require('vinyl-named');                 //重新命名var webpack = require('gulp-webpack');              //js模块打包var cssmin = require('gulp-cssmin');                //压缩cssvar imagemin = require("gulp-imagemin");            //图片压缩var url = require("url");                           //node.js url模块var fs = require("fs");                             //node.js 文件模块var path = require("path");                         //node.js 路径模块var coffee = require('gulp-coffee');var base64 = require("gulp-base64");                //base64var gutil = require("gutil");                       ////image mingulp.task('imagemin', function () {  gulp.src('./src/img/*')    .pipe(imagemin())    .pipe(gulp.dest('./klm/images/'));});//mockApivar mockbase = path.join(__dirname, './mock');var mockApi = function(res, pathname, paramObj, next) {    switch (pathname) {        case '/api/vote':            var data = fs.readFileSync(path.join(mockbase, 'classify.json'), 'utf-8');            res.setHeader('Content-Type', 'application/json');            res.setHeader('Content-type', 'application/javascript');            res.end(data);            // console.log(typeof data);            // console.log(paramObj.callback);            return ;        default:    }    next();};gulp.task('webserver', function () {    gulp.src( './' ) // 服务器目录(./代表根目录)      .pipe(webserver({ // 运行gulp-webserver        livereload:true, // 启用LiveReload        port:1000,        // open: true // 服务器启动时自动打开网页        //middleware为处理数据的中间件        middleware: function(req, res, next) {                var urlObj = url.parse(req.url, true),                    method = req.method,                    paramObj = urlObj.query;                // mock数据                mockApi(res, urlObj.pathname, paramObj, next);            }      }));});// gulp-sassvar sassSrc = [    './src/styles/style.scss'];gulp.task('sass',function(){    return gulp.src(sassSrc)    .pipe(autoprefix('last 2 versions'))    .pipe(sass()).pipe( gulp.dest( './klm/styles/' ) );});// CSS concat, auto-prefix and minifyvar styleSrc = [    './klm/styles/styles.css'];gulp.task('styles', function() {  gulp.src(styleSrc)    .pipe(concat('styles.css'))    .pipe(cssmin())    .pipe(minifyCSS())         //可以使用外部工具进行实现:编辑器插件    .pipe(gulp.dest('./klm/styles/'));    // .pipe(autoprefix('last 2 versions'));});// 要进行自动化的文件var jsFiles = [    './src/scripts/entry.js'];gulp.task("packjs",function(){    return gulp.src(jsFiles)       .pipe(webpack({         //插件项        //  plugins: [        //      new HtmlWebpackPlugin({
// title: 'jquery', // filename: './jquery.js' // }) // ], //输入 entry: { app:jsFiles //文件引入路径 }, output: { path:"", //输出路径 // publicPath: 'http://mycdn.com/', //cdn filename: 'bundle.js' }, // 新添加的module属性 module: { loaders: [ //.css 文件使用 style-loader 和 css-loader 来处理 { test: /\.css$/, loader: 'style-loader!css-loader' }, //.js 文件使用 jsx-loader 来编译处理 { test: /\.js$/, loader: 'jsx-loader?harmony' }, // vue加载器 // {test: /\.vue$/,loader: 'vue'}, //.scss 文件使用 style-loader、css-loader 和 sass-loader 来编译处理 { test: /\.scss$/, loader: 'style!css!sass?sourceMap'}, //图片文件使用 url-loader来处理,小于8kb的直接转为base64 { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}, {test: /\.html$/, loader: 'html'} ] }, //其它解决方案配置 resolve: { root: 'E:/akari丶/workspace/gulp-webpack', //绝对路径 extensions: ['', '.js', '.json', '.scss'], alias: { // AppStore : 'js/stores/AppStores.js', // ActionType : 'js/actions/ActionType.js', // AppAction : 'js/actions/AppAction.js' } } })) //输出路径 .pipe(gulp.dest('./klm/js'));});// default gulp taskgulp.task('default', ['packjs',"styles",'sass','webserver',"imagemin"], function() { // watch for scss changes var watchSass = [ './src/**/*.scss', './src/styles/*.scss' ]; gulp.watch(watchSass, function() { gulp.run('sass'); }); // watch for CSS changes gulp.watch('./src/styles/*.css', function() { gulp.run('styles'); }); // watch for JS changes var watchJs = [ './src/scripts/**/*.js', './src/scripts/*.js' ]; gulp.watch(watchJs, function() { // gulp.run('jshint', 'scripts'); gulp.run('packjs'); }); // watch for html changes // gulp.watch("./src/page/*.html",function(){
// gulp.run("html"); // });});

值得一提的是,在命令行中编译执行gulp的时候,在命令行直接输入gulp回车,就可以执行gulp配置中default默认执行的gulp任务了,同时,watch里面所监控的文件,在文件发生改动的时候,就是执行相应的任务

之前上传过一份简单的配置在githup里面,有需要的童鞋可以下载看一下    -->,

由于在工作中开发的时候,并不需要和后端进行数据对接,只是简单的html模板的编写,所以并不需要很复杂的gulp配置,不足之处,请在评论中指出,请多指教~

 

不管是gulp也好,webpack也好,不管是什么工具,适合自己的,适合团队的,适合项目的,或许才是最好的,要结合开发现状和团队等等因素,就像我们开发的时候,要考虑技术选型一样重要

转载于:https://www.cnblogs.com/akari16/p/6210551.html

你可能感兴趣的文章
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
怎么在windows7系统我的电脑中添加快捷方式
查看>>
QT - 内存泄漏检测
查看>>
三层架构
查看>>
epoll使用具体解释(精髓)
查看>>
数据库设计笔记
查看>>
JPA进行insert操作时会首先select吗
查看>>
AndroidArchitecture
查看>>
原生JavaScript第六篇
查看>>
JS基础学习3
查看>>
Tennis Championship
查看>>
SQL
查看>>
JavaScript基础-var
查看>>
javascript 进阶篇1 正则表达式,cookie管理,userData
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
用WebClinet实现SharePoint上文档库中文件的上传与下载
查看>>
Silverlight和javascript的相互调用
查看>>