electron打包的一些坑
我们知道使用electron打包的时候设置asar为true,electron-builder会智能的把一些native的程序不打包到app.asar里面,但是我碰到一个很奇怪的问题,周五的时候需要使用语音的格式转换,用到了amrToMp3和ffmpeg-static这两个库,其中amrToMp3的主要代码:
const exec = require('child_process').exec
const path = require('path')
const ffmpeg = require('ffmpeg-static')
const ffmpegPath = ffmpeg.path
function amrToMp3(filepath, outputDir = './src/mp3') {
return new Promise((resolve, reject) => {
const basename = path.basename(filepath)
const filename = basename.split('.')[0]
const etc = basename.split('.')[1]
if (etc != 'amr') {
console.log('please input a amr file')
return
}
const cmdStr = `${ffmpegPath} -y -i ${filepath} ${outputDir}/${filename}.mp3`
exec(cmdStr, (err, stdout, stderr) => {
if (err) {
console.log('error:' + stderr)
reject('error:' + stderr)
} else {
resolve(`${outputDir}/${filename}.mp3`)
console.log(`transform to mp3 success! ${filepath}->${outputDir}/${filename}.mp3`)
}
})
})
}
其中用到了exec这个命令,ffmpegPath打包后基本是****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg
,但是打包后运行提示了can not found ****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg
很尴尬,但是我去解压了,明明是存在的,后来我去看了类似的一个库node-notifier,发现用的是execFile这个命令,然后我修改了一下,结果。。。。居然就可以了。这个地方谁知道原因,求解答。。。。
修改之后的程序代码:
var ffmpegPath = path.join(
__dirname,
'bin',
platform,
arch,
platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg'
)
execFile(ffmpegPath, ['-y', '-i', inputPath, cmdStr], function (err, stdout, stderr) {
if (err) {
console.log('error:' + stderr);
reject('error:' + stderr);
} else {
resolve(outputDir + '/' + filename + '.mp3');
console.log('transform to mp3 success! ' + filepath + '->' + outputDir + '/' + filename + '.mp3');
}
});