我正尝试在电子应用程序中包含预编译的二进制文件。我从电子快速启动应用程序开始,然后修改了我的renderer.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页面确实显示它们可以捆绑在一起,但是我找不到任何有关捆绑方法的文档。
node_modules/.bin/
spawn error ENOENT
如果有人碰巧需要这个问题的答案:我确实有解决方案,但是我不知道这是否被认为是最佳实践。我找不到包含第三方预编译二进制文件的任何好的文档,因此我一直在弄弄它直到最终起作用。这是我做的(从电子快速入门,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}` ); });