build.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. process.env.NODE_ENV = 'production'
  2. const fs = require('fs')
  3. const os = require('os')
  4. const chalk = require('chalk')
  5. const spawnExec = require("./spawnExec.js");
  6. let content = fs.readFileSync("./package.json");
  7. content = content.toString();
  8. let packageInfo = JSON.parse(content);
  9. const axios = require('axios');
  10. const FormData = require('form-data');
  11. let path7z = __dirname+"/7z/7z.exe";
  12. let pathNsis = __dirname+"/NSIS/makensis.exe";
  13. let pathUninstallExe = __dirname +"/../build/"+packageInfo.name+"_XY.exe";
  14. (async () => {
  15. logStats(path7z,'开始压缩资源目录!');
  16. if(fs.existsSync(__dirname+'/output/skin.zip')){
  17. fs.unlinkSync(__dirname+'/output/skin.zip');
  18. }
  19. await spawnExec([path7z,'a', __dirname+'/output/skin.zip', __dirname+'/skin/*']).then(res =>{
  20. console.log(chalk.yellow.bold("资源目录压缩完成!"));
  21. }).catch(err => {
  22. console.log(chalk.red.bold("err - 资源目录压缩失败!"),err);
  23. return false;
  24. });
  25. // 读取配置文件
  26. let nsiPath = "./nsis/test.tmp";
  27. let nsiOutPath = "./nsis/test.nsi";
  28. let nsiContent = fs.readFileSync(nsiPath);
  29. nsiContent = nsiContent.toString();
  30. nsiContent = nsiContent.replace(/\<\#name\#\>/g, packageInfo.name);
  31. nsiContent = nsiContent.replace(/\<\#version\#\>/g, packageInfo.version);
  32. nsiContent = nsiContent.replace(/\<\#softMid\#\>/g, packageInfo.softInfo.softMid);
  33. nsiContent = nsiContent.replace(/\<\#softName\#\>/g, packageInfo.softInfo.softName);
  34. nsiContent = nsiContent.replace(/\<\#downloadUrl\#\>/g, packageInfo.softInfo.downloadPrefix + '/' + packageInfo.name + '/lastest'+packageInfo.version+'.7z');
  35. nsiContent = nsiContent.replace(/\<\#copyright\#\>/g, packageInfo.softInfo.copyright);
  36. nsiContent = nsiContent.replace(/\<\#statisticsUrl\#\>/g, packageInfo.softInfo.statisticsUrl);
  37. nsiContent = nsiContent.replace(/\<\#uninstallUrl\#\>/g, packageInfo.softInfo.downloadPrefix + '/' + packageInfo.name + '/uninstallWeb/');
  38. fs.writeFileSync(nsiOutPath,nsiContent);
  39. // 修改卸载推广的网址
  40. let uninstallPath = "./nsis/uninstallpage.xml.tmp";
  41. let uninstallOutPath = "./nsis/skin/uninstallpage.xml";
  42. let uninstallContent = fs.readFileSync(uninstallPath);
  43. uninstallContent = uninstallContent.toString();
  44. uninstallContent = uninstallContent.replace(/\<\#uninstallUrl\#\>/g, packageInfo.softInfo.downloadPrefix + '/' + packageInfo.name + '/uninstallWeb/');
  45. fs.writeFileSync(uninstallOutPath,uninstallContent);
  46. // 写入version
  47. let versionOutPath = "./build/version.json";
  48. let verisonContent = JSON.stringify({"v":packageInfo.version, "c":packageInfo.softInfo.upgradeLog});
  49. fs.writeFileSync(versionOutPath, verisonContent);
  50. // 文件夹7z压缩
  51. if(fs.existsSync(__dirname + '/../build/lastest.7z')){
  52. //fs.unlinkSync(__dirname + '/../build/lastest.7z');
  53. }
  54. if (process.env.BUILD_TARGET == 'pack') {
  55. fs.readdir(__dirname+"/../build",(err,files) => {
  56. files.map(dir => {
  57. if(dir.indexOf(packageInfo.name+'-win32-ia32') != -1){
  58. spawnExec([path7z, 'a', __dirname + '/../build/lastest.7z', __dirname + '/../build/' + dir + '/*']).then(res =>{
  59. console.log(chalk.yellow.bold("软件目录压缩完成!"));
  60. }).catch(err => {
  61. console.log(chalk.red.bold("err - 软件目录压缩失败!"),err);
  62. });
  63. }
  64. })
  65. })
  66. }else{
  67. logStats(path7z,'nsis 开始打包!');
  68. await spawnExec([pathNsis,__dirname+'/test.nsi']).then(async(res) =>{
  69. console.log(chalk.yellow.bold("nsis 打包完成!"));
  70. // 执行静默安装
  71. await spawnExec([pathUninstallExe,'/S']).then(res =>{
  72. fs.copyFileSync(os.tmpdir() + '/uninst.exe', __dirname +"/../build/"+packageInfo.name+"-win32-ia32/uninst.exe")
  73. console.log(chalk.yellow.bold("生成卸载文件!"));
  74. }).catch(err => {
  75. console.log(chalk.red.bold("err - 生成卸载文件失败,请查看配置是否正确!"), err);
  76. return false;
  77. });
  78. }).catch(err => {
  79. console.log(chalk.red.bold("err - 打包失败,请查看配置是否正确!"), err);
  80. return false;
  81. });
  82. }
  83. })();
  84. function getFormData (data) {
  85. let formData = new FormData();
  86. for (let i in data) {
  87. formData.append(i, data[i]);
  88. }
  89. return formData;
  90. };
  91. function logStats (proc, data) {
  92. let log = ''
  93. log += chalk.yellow.bold(`┏ ${proc}`)
  94. log += '\n\n'
  95. if (typeof data === 'object') {
  96. data.toString({
  97. colors: true,
  98. chunks: false
  99. }).split(/\r?\n/).forEach(line => {
  100. log += ' ' + line + '\n'
  101. })
  102. } else {
  103. log += ` ${data}\n`
  104. }
  105. log += '\n' + chalk.yellow.bold(`┗ ${new Array(28 + 1).join('-')}`) + '\n'
  106. console.log(log)
  107. }