win.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const fs = require('fs-extra');
  2. const path = require('path');
  3. const util = require('util');
  4. const stream = require('stream');
  5. const pipeline = util.promisify(stream.pipeline);
  6. const got = require('got');
  7. const FileDecompressor = require('../server/core/FileDecompressor');
  8. const distDir = path.resolve(__dirname, '../dist');
  9. const publicDir = `${distDir}/tmp/public`;
  10. const outDir = `${distDir}/win`;
  11. const tempDownloadDir = `${distDir}/tmp/download`;
  12. async function main() {
  13. const decomp = new FileDecompressor();
  14. await fs.emptyDir(outDir);
  15. // перемещаем public на место
  16. if (await fs.pathExists(publicDir))
  17. await fs.move(publicDir, `${outDir}/public`);
  18. await fs.ensureDir(tempDownloadDir);
  19. //sqlite3
  20. const sqliteRemoteUrl = 'https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.0.4/node-v64-win32-x64.tar.gz';
  21. const sqliteDecompressedFilename = `${tempDownloadDir}/node-v64-win32-x64/node_sqlite3.node`;
  22. if (!await fs.pathExists(sqliteDecompressedFilename)) {
  23. // Скачиваем node_sqlite3.node для винды, т.к. pkg не включает его в сборку
  24. await pipeline(got.stream(sqliteRemoteUrl), fs.createWriteStream(`${tempDownloadDir}/sqlite.tar.gz`));
  25. console.log(`done downloading ${sqliteRemoteUrl}`);
  26. //распаковываем
  27. console.log(await decomp.unpackTarZZ(`${tempDownloadDir}/sqlite.tar.gz`, tempDownloadDir));
  28. console.log('files decompressed');
  29. }
  30. // копируем в дистрибутив
  31. await fs.copy(sqliteDecompressedFilename, `${outDir}/node_sqlite3.node`);
  32. console.log(`copied ${sqliteDecompressedFilename} to ${outDir}/node_sqlite3.node`);
  33. //ipfs
  34. const ipfsDecompressedFilename = `${tempDownloadDir}/go-ipfs/ipfs.exe`;
  35. if (!await fs.pathExists(ipfsDecompressedFilename)) {
  36. // Скачиваем ipfs
  37. const ipfsRemoteUrl = 'https://dist.ipfs.io/go-ipfs/v0.4.18/go-ipfs_v0.4.18_windows-amd64.zip';
  38. await pipeline(got.stream(ipfsRemoteUrl), fs.createWriteStream(`${tempDownloadDir}/ipfs.zip`));
  39. console.log(`done downloading ${ipfsRemoteUrl}`);
  40. //распаковываем
  41. console.log(await decomp.unpack(`${tempDownloadDir}/ipfs.zip`, tempDownloadDir));
  42. console.log('files decompressed');
  43. }
  44. // копируем в дистрибутив
  45. await fs.copy(ipfsDecompressedFilename, `${outDir}/ipfs.exe`);
  46. console.log(`copied ${ipfsDecompressedFilename} to ${outDir}/ipfs.exe`);
  47. }
  48. main();