一尘不染

如何将预编译的二进制文件与电子捆绑在一起

node.js

我正尝试在电子应用程序中包含预编译的二进制文件。我从电子快速启动应用程序开始,然后修改了我的renderer.js文件以包含以下代码,该代码在将文件放在身体上时触发:

spawn = require('child_process').spawn,
  ffmpeg = spawn('node_modules/.bin/ffmpeg', ['-i', clips[0], '-an', '-q:v', '1', '-vcodec', 'libx264', '-y', '-pix_fmt', 'yuv420p', '-vf', 'setsar=1,scale=trunc(iw/2)*2:trunc(ih/2)*2,crop=in_w:in_h-50:0:50', '/tmp/out21321.mp4']);

ffmpeg.stdout.on('data', data => {
  console.log(`stdout: ${data}`);
});
ffmpeg.stderr.on('data', data => {
  console.log(`stderr: ${data}`);
});

我将预编译的 ffmpeg 二进制文件放入node_modules/.bin/。一切在开发面板中都运行良好,但是当我使用electronic-
packager设置应用程序时,spawn error ENOENT在触发时会向控制台抛出a,但是似乎并没有得到明确的答案。electronic-
packager上

npm页面确实显示它们可以捆绑在一起,但是我找不到任何有关捆绑方法的文档。


阅读 294

收藏
2020-07-07

共1个答案

一尘不染

如果有人碰巧需要这个问题的答案:我确实有解决方案,但是我不知道这是否被认为是最佳实践。我找不到包含第三方预编译二进制文件的任何好的文档,因此我一直在弄弄它直到最终起作用。这是我做的(从电子快速入门,node.js
v6开始):

在app目录中,我运行了以下命令以将ffmpeg二进制文件包含为模块:

mkdir node_modules/ffmpeg
cp /usr/local/bin/ffmpeg node_modules/ffmpeg/
ln -s ../ffmpeg/ffmpeg node_modules/.bin/ffmpeg

(将/ usr / local / bin /
ffmpeg替换为您当前的二进制路径,然后从此处下载)放置链接允许电子打包程序包括我保存到node_modules / ffmpeg /的二进制文件。

然后,为了获取捆绑的应用程序路径,我通过运行以下命令安装了npm软件包app-root-dir:

npm i -S app-root-dir

由于可以获取应用程序路径,因此我只为二进制文件添加了子文件夹并从那里生成了。这是我放在renderer.js中的代码:

var appRootDir = require('app-root-dir').get();
var ffmpegpath=appRootDir+'/node_modules/ffmpeg/ffmpeg';
console.log(ffmpegpath);

const
    spawn = require( 'child_process' ).spawn,
    ffmpeg = spawn( ffmpegpath, ['-i',clips_input[0]]);  //add whatever switches you need here

ffmpeg.stdout.on( 'data', data => {
     console.log( `stdout: ${data}` );
    });
   ffmpeg.stderr.on( 'data', data => {
console.log( `stderr: ${data}` );
    });
2020-07-07