1const fs = require('fs') 2const path = require('path') 3 4import type {Plugin, ResolvedConfig} from "vite"; 5import replace from "@rollup/plugin-replace"; 6 7// @ts-ignore 8import cli from "@tauri-apps/cli" 9 10 11function copyFolder(copiedPath, resultPath, direct) { 12 if (!direct) { 13 copiedPath = path.join(__dirname, copiedPath) 14 resultPath = path.join(__dirname, resultPath) 15 } 16 17 function createDir(dirPath) { 18 fs.mkdirSync(dirPath) 19 } 20 21 if (fs.existsSync(copiedPath)) { 22 createDir(resultPath) 23 /** 24 * @des 方式一:利用子进程操作命令行方式 25 */ 26 // child_process.spawn('cp', ['-r', copiedPath, resultPath]) 27 28 /** 29 * @des 方式二: 30 */ 31 const files = fs.readdirSync(copiedPath, {withFileTypes: true}); 32 for (let i = 0; i < files.length; i++) { 33 const cf = files[i] 34 const ccp = path.join(copiedPath, cf.name) 35 const crp = path.join(resultPath, cf.name) 36 if (cf.isFile()) { 37 /** 38 * @des 创建文件,使用流的形式可以读写大文件 39 */ 40 const readStream = fs.createReadStream(ccp) 41 const writeStream = fs.createWriteStream(crp) 42 readStream.pipe(writeStream) 43 } else { 44 try { 45 /** 46 * @des 判断读(R_OK | W_OK)写权限 47 */ 48 fs.accessSync(path.join(crp, '..'), fs.constants.W_OK) 49 copyFolder(ccp, crp, true) 50 } catch (error) { 51 console.log('folder write error:', error); 52 } 53 54 } 55 } 56 } else { 57 console.log('do not exist path: ', copiedPath); 58 } 59} 60 61 62export default (): Plugin => { 63 let viteConfig: ResolvedConfig; 64 65 const tauri = (mode: "dev" | "build"): Promise<any> => { 66 try { 67 return cli.run([mode], 'tauri') 68 } catch (err) { 69 console.error(err) 70 return Promise.reject(err) 71 } 72 } 73 74 return { 75 ...replace({ 76 "process.env.IS_TAURI": "true", 77 preventAssignment: false 78 }), 79 name: "tauri-plugin", 80 configureServer(server) { 81 server?.httpServer?.on("listening", () => { 82 if (!process.env.TAURI_SERVE) { 83 process.env.TAURI_SERVE = "true"; 84 tauri('dev').finally() 85 } 86 }); 87 }, 88 closeBundle() { 89 if (!process.env.TAURI_BUILD) { 90 process.env.TAURI_BUILD = "true"; 91 copyFolder('../thirdLib', '../build/thirdLib', false) 92 tauri('build').finally() 93 } 94 }, 95 config(viteConfig, env) { 96 process.env.IS_TAURI = "true"; 97 }, 98 configResolved(resolvedConfig) { 99 viteConfig = resolvedConfig; 100 }, 101 }; 102};