详解webpack+gulp实现自动构建部署


Posted in Javascript onJune 29, 2017

webpack系列目录

正文

本篇包含以下三点:

1.区分开发环境和生产环境

2.集成gulp

3.package.json 配置

前面主要介绍了webpack 的一些基础用法,该篇做一个整体介绍,如何集成gulp?如何应对多部署环境?

项目结构说明

.
 ├── gulpfile.js    # gulp任务配置
 ├── mock/      # 假数据文件
 ├── package.json    # 项目配置
 ├── README.md     # 项目说明
 ├── src      # 源码目录
 │ ├── pageA.html    # 入口文件a
 │ ├── pageB.html    # 入口文件b
 │ ├── pageC.html    # 入口文件c
 │ ├── css/     # css资源
 │ ├── img/     # 图片资源
 │ ├── js     # js&jsx资源
 │ │ ├── pageA.js    # a页面入口
 │ │ ├── pageB.js    # b页面入口
 │ │ ├── pageC.js    # c页面入口
 │ │ ├── helpers/   # 业务相关的辅助工具
 │ │ ├── lib/    # 没有存放在npm的第三方库或者下载存放到本地的基础库,如jQuery、Zepto等
 │ │ └── utils/   # 业务无关的辅助工具
 │ ├── scss/     # scss资源
 │ ├── pathmap.json   # 手动配置某些模块的路径,可以加快webpack的编译速度
 ├── webpack.config.allinone.js # webpack配置
 ├── webpack.config.js   # 正式环境webpack配置入口
 └── webpack-dev.config.js  # 开发环境webpack配置入口

一:区分 dev环境 和 生产环境

重命名 webpack.config.js => webpack.config.allinone.js

内容上,新增options参数,利用options.debug 来控制webpack参数,用来区分开发和生产环境。例如开发环境不需要混淆和压缩js文件,但是开发环境需要。通过option.debug来区分选择相应的loader配置和Plugin:

module.exports = function(options){
 options = options || {}
 var debug = options.debug !==undefined ? options.debug :true;

 ......
  if(debug){
  // 
 }else{
  //
 }

新增webpack.config.js webpack-dev.config.js

//webpack.config.js
'use strict';
var webpack_config = require('./webpack.config.allinone') 
module.exports = webpack_config({debug:false})
//webpack-dev.config.js
'use strict';
var webpack_config = require('./webpack.config.allinone') 
module.exports = webpack_config({debug:true})

后续可以根据gulp 指令 动态选择 是开发环境还是测试环境,具体见gulpfile.js

//用于gulp传递参数
var minimist = require('minimist');
var knownOptions = {
 string: 'env',
 default: {env: process.env.NODE_ENV || 'production'}
};

var options = minimist(process.argv.slice(2), knownOptions);

var webpackConf = require('./webpack.config');
var webpackConfDev = require('./webpack-dev.config');

var _conf = options.env === 'production' ? webpackConf : webpackConfDev;
webpack(_conf, function (err, stats) {......

二:集成gulp

利用 gulp 完成以下工作:

  1. 代码检查
  2. clean操作
  3. run webpack pack
  4. deploy 发布

安装gulp

$ npm install gulp gulp-clean jshint gulp-jshint jshint-stylish gulp-sftp gulp-util minimist --save-dev

新增gulpfile.js

完整gulpfile.js 如下:

/**
 * Created by sloong on 2016/6/14.
 */
'use strict';

var gulp = require('gulp');
var webpack = require('webpack');

//用于gulp传递参数
var minimist = require('minimist');

var gutil = require('gulp-util');

var src = process.cwd() + '/src';
var assets = process.cwd() + '/dist';

var knownOptions = {
 string: 'env',
 default: {env: process.env.NODE_ENV || 'production'}
};

var options = minimist(process.argv.slice(2), knownOptions);

var webpackConf = require('./webpack.config');
var webpackConfDev = require('./webpack-dev.config');

var remoteServer = {
 host: '192.168.56.129',
 remotePath: '/data/website/website1',
 user: 'root',
 pass: 'password'
};
var localServer = {
 host: '192.168.56.130',
 remotePath: '/data/website/website1',
 user: 'root',
 pass: 'password'
}

//check code
gulp.task('hint', function () {
 var jshint = require('gulp-jshint')
 var stylish = require('jshint-stylish')

 return gulp.src([
  '!' + src + '/js/lib/**/*.js',
  src + '/js/**/*.js'
 ])
  .pipe(jshint())
  .pipe(jshint.reporter(stylish));
})

// clean asserts
gulp.task('clean', ['hint'], function () {
 var clean = require('gulp-clean');
 return gulp.src(assets, {read: true}).pipe(clean())
});

//run webpack pack
gulp.task('pack', ['clean'], function (done) {
 var _conf = options.env === 'production' ? webpackConf : webpackConfDev;
 webpack(_conf, function (err, stats) {
  if (err) throw new gutil.PluginError('webpack', err)
  gutil.log('[webpack]', stats.toString({colors: true}))
  done()
 });
});

//default task
gulp.task('default', ['pack'])

//deploy assets to remote server
gulp.task('deploy', function () {
 var sftp = require('gulp-sftp');
 var _conf = options.env === 'production' ? remoteServer : localServer;
 return gulp.src(assets + '/**')
  .pipe(sftp(_conf))
})

三:package.json 配置

scripts 配置 各个指令

  1. 启动webpack调试server: npm run server
  2. 测试环境打包: npm run build
  3. 生产环境打包: npm run build-online
  4. 发布到测试环境: npm run deploy
  5. 发布到生产环境: npm run deploy-online

完整package.json 如下:

{
  "name": "webpack-avalon",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
  "server": "webpack-dev-server --inline",
  "build": "gulp pack --env debug",
  "build-online": "gulp pack --env production",
  "deploy": "gulp deploy --env debug",
  "deploy-online": "gulp deploy --env production"
  },
  "author": "sloong",
  "license": "MIT",
  "devDependencies": {
  "css-loader": "^0.21.0",
  "ejs-loader": "^0.3.0",
  "extract-text-webpack-plugin": "^1.0.1",
  "file-loader": "^0.8.5",
  "gulp": "^3.9.1",
  "gulp-clean": "^0.3.2",
  "gulp-jshint": "^2.0.1",
  "gulp-sftp": "^0.1.5",
  "gulp-util": "^3.0.7",
  "html-loader": "^0.4.3",
  "html-webpack-plugin": "^2.19.0",
  "jshint": "^2.9.2",
  "jshint-stylish": "^2.2.0",
  "jsx-loader": "^0.13.2",
  "minimist": "^1.2.0",
  "node-sass": "^3.7.0",
  "sass-loader": "^3.2.0",
  "style-loader": "^0.13.0",
  "url-loader": "^0.5.7",
  "webpack": "^1.13.1",
  "webpack-dev-server": "^1.14.1"
  }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript动态调整iframe高度的代码
Apr 10 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
Jan 08 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
js实现加载更多功能实例
Oct 27 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 Javascript
泛谈JS逻辑判断选择器 || &&
May 24 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
bootstrapvalidator之API学习教程
Jun 29 #Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
Jun 29 #Javascript
jQuery开源组件BootstrapValidator使用详解
Jun 29 #jQuery
详解webpack 多页面/入口支持&公共组件单独打包
Jun 29 #Javascript
详解webpack 如何集成第三方js库
Jun 29 #Javascript
详解webpack介绍&安装&常用命令
Jun 29 #Javascript
基于node.js制作简单爬虫教程
Jun 29 #Javascript
You might like
PHP可逆加密/解密函数分享
2012/09/25 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
vue实现评论列表功能
2019/10/25 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
python队列queue模块详解
2018/04/27 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
食品安全处置方案
2014/06/14 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
维稳工作情况汇报
2014/10/27 职场文书
运动会主持词大全
2015/07/02 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
护士业务学习心得体会
2016/01/25 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python