install.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env node
  2. // maintainer note - x.y.z-ab version in package.json -> x.y.z
  3. var version = require('./package').version.replace(/-.*/, '')
  4. var fs = require('fs')
  5. var os = require('os')
  6. var path = require('path')
  7. var extract = require('extract-zip')
  8. var download = require('electron-download')
  9. var installedVersion = null
  10. try {
  11. installedVersion = fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '')
  12. } catch (err) {
  13. // do nothing
  14. }
  15. var platform = process.env.npm_config_platform || os.platform()
  16. function onerror (err) {
  17. throw err
  18. }
  19. var paths = {
  20. darwin: 'dist/Electron.app/Contents/MacOS/Electron',
  21. freebsd: 'dist/electron',
  22. linux: 'dist/electron',
  23. win32: 'dist/electron.exe'
  24. }
  25. if (!paths[platform]) throw new Error('Electron builds are not available on platform: ' + platform)
  26. if (installedVersion === version && fs.existsSync(path.join(__dirname, paths[platform]))) {
  27. process.exit(0)
  28. }
  29. // downloads if not cached
  30. download({
  31. version: version,
  32. platform: process.env.npm_config_platform,
  33. arch: process.env.npm_config_arch,
  34. strictSSL: process.env.npm_config_strict_ssl === 'true',
  35. quiet: ['info', 'verbose', 'silly', 'http'].indexOf(process.env.npm_config_loglevel) === -1
  36. }, extractFile)
  37. // unzips and makes path.txt point at the correct executable
  38. function extractFile (err, zipPath) {
  39. if (err) return onerror(err)
  40. fs.writeFile(path.join(__dirname, 'path.txt'), paths[platform], function (err) {
  41. if (err) return onerror(err)
  42. extract(zipPath, {dir: path.join(__dirname, 'dist')}, function (err) {
  43. if (err) return onerror(err)
  44. })
  45. })
  46. }