loudness是一款控制系统音量输出的一款 Node.js 库;但是在electron-vite中直接使用编译的时候会报错;这个时候需要单独处理;
错误分析
- error Error: spawn E:\xxx\out\main\adjust_get_current_system_volume_vista_plus.exe
- 查看编译后项目确实没有这个exe文件,应该electron-vite的编译机制问题;既然找到问题就好办了;
- node_modules/loudness/impl/windows ;可以找到这个文件;
解决方案
思路打包编译的时候复制这个exe到out文件目录
项目中引入版本
// 项目中版本
"loudness": "^0.4.2"
// 下载
npm i loudness -D
编写复制逻辑vite-plugin-loudnessCopy.ts
// 拷贝loudness文件
import fs from 'fs';
import path from 'path';
export default function loudnessCopy() {
return {
name: 'vite-plugin-loudnessCopy',
configResolved(resolvedConfig: any) {
},
buildStart() {
// 源文件路径
const source = path.join('node_modules', 'loudness', 'impl', 'windows', 'adjust_get_current_system_volume_vista_plus.exe');
// 目标目录路径
const destinationDir = path.join(__dirname, 'out', 'main');
// 确保目标目录存在
fs.mkdirSync(destinationDir, { recursive: true });
// 目标文件路径
const destination = path.join(destinationDir, path.basename(source));
// 检查文件是否存在
fs.access(source, fs.constants.F_OK, (err) => {
if (err) {
console.log('文件不存在,不执行复制操作。');
return;
}
// 复制文件
fs.copyFile(source, destination, (err) => {
if (err) {
console.error('复制文件时出错:', err);
} else {
console.log('文件复制成功。');
}
});
});
}
}
}
在electron.vite.config文件中引入插件
// 引入插件
import loudnessCopy from './vite-plugin-loudnessCopy'
export default defineConfig({
...,
// 使用插件
plugins: [react(), loudnessCopy()],
...,
})
主进程main.js中写入测试demo
import loudness from 'loudness';
function createWindow(): void {
loudness.getVolume().then((val) => {
console.log('successs', val);
}).catch((error) => {
console.log('error', error);
});
}