electron打包的一些坑

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');
 }
});

猜你喜欢

转载自blog.csdn.net/lihangxiaoji/article/details/80801191