122 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** | ||
|  |  * power by biuuu | ||
|  |  */ | ||
|  | 
 | ||
|  | const chalk = require("chalk"); | ||
|  | const { join } = require('path') | ||
|  | const crypto = require('crypto') | ||
|  | const AdmZip = require('adm-zip') | ||
|  | const packageFile = require('../package.json') | ||
|  | const { build } = require("../config/index") | ||
|  | const { platform } = require("os") | ||
|  | const { ensureDir, emptyDir, copy, outputJSON, remove, stat, readFile } = require("fs-extra"); | ||
|  | 
 | ||
|  | const platformName = platform().includes('win32') ? 'win' : platform().includes('darwin') ? 'mac' : 'linux' | ||
|  | const buildPath = join('.', 'build', `${platformName === 'mac' ? 'mac' : platformName + '-unpacked'}`) | ||
|  | 
 | ||
|  | const hash = (data, type = 'sha256') => { | ||
|  |     const hmac = crypto.createHmac(type, 'Sky') | ||
|  |     hmac.update(data) | ||
|  |     return hmac.digest('hex') | ||
|  | } | ||
|  | 
 | ||
|  | const createZip = (filePath, dest) => { | ||
|  |     const zip = new AdmZip() | ||
|  |     zip.addLocalFolder(filePath) | ||
|  |     zip.toBuffer() | ||
|  |     zip.writeZip(dest) | ||
|  | } | ||
|  | 
 | ||
|  | const start = async () => { | ||
|  |     console.log(chalk.green.bold(`\n  Start packing`)) | ||
|  | 
 | ||
|  |     if (packageFile.build.asar) { | ||
|  |         console.log( | ||
|  |             "\n" + | ||
|  |             chalk.bgRed.white(" ERROR ") + | ||
|  |             "  " + | ||
|  |             chalk.red("Please make sure the build.asar option in the Package.json file is set to false") + | ||
|  |             "\n" | ||
|  |         ); | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (build.hotPublishConfigName === '') { | ||
|  |         console.log( | ||
|  |             "\n" + | ||
|  |             chalk.bgRed.white(" ERROR ") + | ||
|  |             "  " + | ||
|  |             chalk.red("HotPublishConfigName is not set, which will cause the update to fail, please set it in the config/index.js \n") | ||
|  |             + chalk.red.bold(`\n  Packing failed \n`) | ||
|  |         ); | ||
|  |         process.exit(1) | ||
|  |     } | ||
|  | 
 | ||
|  |     stat(join(buildPath, 'resources', 'app'), async (err, stats) => { | ||
|  |         if (err) { | ||
|  |             console.log( | ||
|  |                 "\n" + | ||
|  |                 chalk.bgRed.white(" ERROR ") + | ||
|  |                 "  " + | ||
|  |                 chalk.red("No resource files were found, please execute this command after the build command") + | ||
|  |                 "\n" | ||
|  |             ); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         try { | ||
|  |             const packResourcesPath = join('.', 'build', 'resources', 'dist'); | ||
|  |             const packPackagePath = join('.', 'build', 'resources'); | ||
|  |             const resourcesPath = join('.', 'dist'); | ||
|  |             const appPath = join('.', 'build', 'resources'); | ||
|  |             const name = "app.zip"; | ||
|  |             const outputPath = join('.', 'build', 'update'); | ||
|  |             const zipPath = join(outputPath, name); | ||
|  | 
 | ||
|  |             await ensureDir(packResourcesPath); | ||
|  |             await emptyDir(packResourcesPath); | ||
|  |             await copy(resourcesPath, packResourcesPath); | ||
|  |             await outputJSON(join(packPackagePath, "package.json"), { | ||
|  |                 name: packageFile.name, | ||
|  |                 productName: packageFile.productName, | ||
|  |                 version: packageFile.version, | ||
|  |                 private: packageFile.private, | ||
|  |                 description: packageFile.description, | ||
|  |                 main: packageFile.main, | ||
|  |                 author: packageFile.author, | ||
|  |                 dependencies: packageFile.dependencies | ||
|  |             }); | ||
|  |             await ensureDir(outputPath); | ||
|  |             await emptyDir(outputPath); | ||
|  |             createZip(appPath, zipPath); | ||
|  |             const buffer = await readFile(zipPath); | ||
|  |             const sha256 = hash(buffer); | ||
|  |             const hashName = sha256.slice(7, 12); | ||
|  |             await copy(zipPath, join(outputPath, `${hashName}.zip`)); | ||
|  |             await remove(zipPath); | ||
|  |             await remove(appPath) | ||
|  |             await outputJSON(join(outputPath, `${build.hotPublishConfigName}.json`), | ||
|  |                 { | ||
|  |                     version: packageFile.version, | ||
|  |                     name: `${hashName}.zip`, | ||
|  |                     hash: sha256 | ||
|  |                 } | ||
|  |             ); | ||
|  |             console.log( | ||
|  |                 "\n" + chalk.bgGreen.white(" DONE ") + "  " + "The resource file is packaged!\n" | ||
|  |             ); | ||
|  |             console.log("File location: " + chalk.green(outputPath) + "\n"); | ||
|  |         } catch (error) { | ||
|  |             console.log( | ||
|  |                 "\n" + | ||
|  |                 chalk.bgRed.white(" ERROR ") + | ||
|  |                 "  " + | ||
|  |                 chalk.red(error.message || error) + | ||
|  |                 "\n" | ||
|  |             ); | ||
|  |             process.exit(1) | ||
|  |         } | ||
|  |     }); | ||
|  | } | ||
|  | 
 | ||
|  | start() |