webpack+gulp+qshell+npm-scripts实现一个命令完成[打包+同步cdn+上传服务器]

说明

由于我们用的七牛云存储,所以cdn也是走的七牛,所以并不适用于其他的cdn,但是思路可以借鉴

打包

打包目前我这边用的是webpack,网上已经有很多文章了,这里就不作过多阐述了,只是说一下publicPath这个参数,如果要做cdn同步肯定是要配置这个参数的,目前我是这样配置的:

http://youCdnPath/${process.env.npm_package_name}/

上面的process.env.npm_package_name就是你packge.json里面的name字段

上传资源到服务器

这块的实现我用的是gulp配合gulp-ssh来实现的,会先删除现有文件然后上传,不会由于文件指纹变动导致文件的堆积,然后所有的静态资源都走的cdn,所以,只上传了dist目录下不包括static目录的文件,具体配置如下:

/*
yarn add gulp gulp-ssh
*/
const gulp = require('gulp')
const GulpSSH = require('gulp-ssh')
// 需要上传到服务器的路径
const remotePath = '/home/wwwroot/default/hyan_weixin/public/pages/h5/2018/0125zaosangrenhe'
const config = {
ssh: { // 正式
host: 'xx.xx.xx.xx',
port: 22,
username: 'root',
password: 'xxxxxxxx'
},
remotePath: remotePath,
commands: [
// 删除现有文件
`rm -rf ${remotePath}`
]
}
let gulpSSH = new GulpSSH({
ignoreErrors: false,
sshConfig: config.ssh
})
/**
* 上传前先删除服务器上现有文件...
*/
gulp.task('execSSH', () => {
console.log('删除服务器上现有文件...')
return gulpSSH.shell(config.commands, {filePath: 'commands.log'})
.pipe(gulp.dest('logs'))
})
/**
* 上传文件到服务器
*/
gulp.task('deploy', ['execSSH'], () => {
console.log('2s后开始上传文件到服务器...')
setTimeout(() => {
return gulp.src(['./dist/**', '!./dist/static/**'])
.pipe(gulpSSH.dest(config.remotePath))
}, 2000)
})

同步静态资源到cdn

这块用的到是我自己开发的一个npm插件qiniu-qupload,配置起来也很方便,这段代码我放在./scripts/cdn.js目录下,具体内容如下:

const qiniuUploader = require('qiniu-qupload')
const path = require('path')
const qnConf = {
"ak" : "youAK",
"sk" : "youSK",
"src_dir" : `${path.resolve(process.cwd(), './dist/static').replace(/\\/g, '\\')}`,
"bucket" : "youBucket",
"key_prefix" : "11test/static/",
"overwrite" : true,
"rescan_local" : true,
"log_file" : "qnupload.log",
"file_type" : 0
}
qiniuUploader(qnConf)

把上面对应的字段换成你自己的七牛的配置就行了,一般这些参数就可以了,另外,需要特别说明一下src_dir这个参数,mac和windows不一样,上面的为windows平台的示例,mac应该为path.resolve(process.cwd(), './test')但是我没验证,具体说明和其他完整的配置参数可参考qshell-qupload官方文档

注意:qiniu-qupload插件依赖于七牛的命令行工具qshell,所以需要先安装qshell

集成打包,同步cdn,上传服务器为一个命令

这一步就比较简单了,直接在package.json里面的scripts字段加个命令就行了,具体如下:

{
"name": "11test",
"scripts": {
"dev": "node build/dev-server.js",
"build": "node build/build.js",
"deploy": "gulp deploy",
"build-cdn-deploy": "npm run build && node scripts/cdn.js && npm run deploy"
}
}

然后直接执行npm run build-cdn-deploy就行了

最新文章

  1. Maven(一)环境搭建
  2. PHP代码 如何网页获取用户的openid
  3. 【腾讯Bugly干货分享】让 CodeReview 这股清流再飞一会儿
  4. Java(接口与继承)动手动脑
  5. html 动态显示元素文本
  6. Linux curl使用简单介绍
  7. hiho 毁灭者问题
  8. Best Practice of cross-platform games
  9. 在不同平台上CocosDenshion所支持的音频格式
  10. Visual Studio小技巧
  11. Java模块化概念解惑与现状总结
  12. Akari谜题(关灯问题)的开灯解法
  13. sublime代码格式化插件HTML/CSS/JS prettify
  14. Object.assign()
  15. ASP.NET没有魔法——ASP.NET MVC界面美化及使用Bundle完成静态资源管理
  16. 《java入门第一季》之面向对象this关键字
  17. 配置Spark
  18. FB面经Prepare: Merge K sorted Array
  19. Java开源框架知识整理
  20. php-fpm重启

热门文章

  1. LeetCode-071-简化路径
  2. 用端口映射的办法使用矩池云隐藏的vnc功能
  3. linux Wireshark图解TCP三次握手与四次挥手
  4. python-用代码实现队列,处理斐波那契数列
  5. 闲聊系列之 5-why root cause分析法
  6. 一文搞懂 SLAM 中的Extension Kalman Filter 算法编程
  7. 《前端运维》一、Linux基础--10定时任务
  8. hashlib 模块 摘要算法
  9. Java的http post请求01之HttpURLConnection
  10. 字节跳动社会招聘&内推-帮助你更快加入字节跳动