gulpfile.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /**
  2. * @author oldj
  3. * @blog http://oldj.net
  4. */
  5. 'use strict'
  6. /**
  7. * 注:ELECTRON_VERSION 为对应的 Electron 版本
  8. * 直接运行命令会自动下载对应文件,
  9. * 也可手动从 https://github.com/electron/electron/releases 下载最新版本,放到 ~/.electron 目录下
  10. * 淘宝镜像:https://npm.taobao.org/mirrors/electron/
  11. */
  12. const ELECTRON_VERSION = require('./package.json').devDependencies.electron.replace(/\^/, '')
  13. const fs = require('fs')
  14. const path = require('path')
  15. // const util = require('util');
  16. const exec = require('child_process').exec
  17. const gulp = require('gulp')
  18. // const shell = require('gulp-shell')
  19. // const webpack = require('webpack')
  20. const beautify = require('js-beautify').js_beautify
  21. const args = require('yargs').argv
  22. //console.log(args)
  23. // const IS_DEBUG = !!args.debug;
  24. // const TPL_FILE_INFO = "echo '> (DEBUG " + (IS_DEBUG ? "on" : "off") + ") <%= file.path %>'";
  25. gulp.task('ver', (done) => {
  26. let fn = path.join(__dirname, 'app', 'version.js')
  27. let version = require('./app/version').version
  28. version[3]++
  29. console.log(`version -> ${version.join('.')}`)
  30. let cnt = `exports.version = ${JSON.stringify(version)};`
  31. fs.writeFileSync(fn, cnt, 'utf-8')
  32. function updatePackage (fn) {
  33. cnt = fs.readFileSync(fn)
  34. let d = JSON.parse(cnt)
  35. d.version = version.slice(0, 3).join('.')
  36. cnt = beautify(JSON.stringify(d), {indent_size: 2})
  37. fs.writeFileSync(fn, cnt, 'utf-8')
  38. }
  39. // update package.json
  40. updatePackage(path.join(__dirname, 'package.json'))
  41. updatePackage(path.join(__dirname, 'app', 'package.json'))
  42. done()
  43. })
  44. gulp.task('pack', (done) => {
  45. let version = require('./app/version').version
  46. let v1 = version.slice(0, 3).join('.')
  47. let v2 = version[3]
  48. let pack = {}
  49. pack.macOS = `
  50. # for macOS
  51. electron-packager ./app 'SwitchHosts!' --platform=darwin --arch=x64 --electron-version=${ELECTRON_VERSION} --overwrite --asar=true --prune --icon=./assets/app.icns --ignore=node_modules/.bin --ignore=.git --ignore=${__dirname}/dist --ignore="node_modules/electron-(?!(?:window-state)).*" --out=dist --app-version=${v1} --build-version=${v2}
  52. `
  53. pack.win64 = `
  54. # for windows x64
  55. electron-packager ./app 'SwitchHosts!' --platform=win32 --arch=x64 --electron-version=${ELECTRON_VERSION} --overwrite --asar=true --prune --icon=./assets/app.ico --ignore=node_modules/.bin --ignore=.git --ignore=${__dirname}/dist --ignore="node_modules/electron-(?!(?:window-state)).*" --out=dist --app-version=${v1} --build-version=${v2}
  56. `
  57. pack.win32 = `
  58. # for windows ia32
  59. electron-packager ./app 'SwitchHosts!' --platform=win32 --arch=ia32 --electron-version=${ELECTRON_VERSION} --overwrite --asar=true --prune --icon=./assets/app.ico --ignore=node_modules/.bin --ignore=.git --ignore=${__dirname}/dist --ignore="node_modules/electron-(?!(?:window-state)).*" --out=dist --app-version=${v1} --build-version=${v2}
  60. `
  61. pack.linux = `
  62. # for linux x86_64
  63. electron-packager ./app 'SwitchHosts!' --platform=linux --arch=x64 --electron-version=${ELECTRON_VERSION} --overwrite --asar=true --prune --icon=./assets/app.ico --ignore=node_modules/.bin --ignore=.git --ignore=${__dirname}/dist --ignore="node_modules/electron-(?!(?:window-state)).*" --out=dist --app-version=${v1} --build-version=${v2}
  64. `
  65. let cmds = []
  66. if (!args.platform) {
  67. cmds = [pack.macOS, pack.win64, pack.win32, pack.linux]
  68. } else {
  69. let a = args.platform.split(',')
  70. a.map(i => cmds.push(pack[i] || ''))
  71. }
  72. console.log(`start packing, v: ${v1}.${v2} ..`)
  73. console.log(cmds.join('\n'))
  74. exec(cmds.join('\n'), (error, stdout, stderr) => {
  75. console.log('end pack.')
  76. if (error) {
  77. console.error(`exec error: ${error}`)
  78. }
  79. // if (stdout) console.log(`${stdout}`);
  80. // if (stderr) console.log(`${stderr}`);
  81. done()
  82. })
  83. })
  84. gulp.task('zip', (done) => {
  85. let version = require('./app/version').version
  86. let v = version.join('.')
  87. let cmds = `
  88. cd ./dist
  89. rm -f ./SwitchHosts-*.zip
  90. zip -ry SwitchHosts-macOS-x64_v${v}.zip ./SwitchHosts\\!-darwin-x64/SwitchHosts\\!.app
  91. zip -ry SwitchHosts-win32-x64_v${v}.zip ./SwitchHosts\\!-win32-x64
  92. zip -ry SwitchHosts-win32-ia32_v${v}.zip ./SwitchHosts\\!-win32-ia32
  93. zip -ry SwitchHosts-linux-x64_v${v}.zip ./SwitchHosts\\!-linux-x64
  94. cd ..
  95. `
  96. console.log(`start zip ..`)
  97. exec(cmds, (error, stdout, stderr) => {
  98. console.log('end zip.')
  99. if (error) {
  100. console.error(`exec error: ${error}`)
  101. }
  102. // if (stdout) console.log(`${stdout}`);
  103. // if (stderr) console.log(`${stderr}`);
  104. done()
  105. })
  106. })
  107. gulp.task('default', () => {
  108. //gulp.start('webpack')
  109. gulp.watch([
  110. 'app/**/*.*'
  111. , '!app/bundle.*'
  112. , '!app/node_modules/*'
  113. , '!app/package.json'
  114. , '!app/version.js'
  115. , 'app-ui/**/*.*'
  116. , '!app-ui/node_modules/*'
  117. ], ['ver'])
  118. })