electron如何处理全局依赖关系
我是电子新手。我正在构建一个使用ffmpeg和sox的应用程序,它们在全球范围内安装。如何保证这些依赖项将安装在用户计算机上 试试这个,它不是电子特有的,但有帮助electron如何处理全局依赖关系,electron,Electron,我是电子新手。我正在构建一个使用ffmpeg和sox的应用程序,它们在全球范围内安装。如何保证这些依赖项将安装在用户计算机上 试试这个,它不是电子特有的,但有帮助 可能存在两种系统级依赖关系: 预计将在系统级安装基于NPM的软件包 非NPM包,如系统级库(在您的示例中为ffmpeg) 对于基于NPM的包,您可以执行如下对等依赖: { .... "peerDependencies": { "chai": "1.x" } .... } 对于非NPM包,通常的模式是在应用程
可能存在两种系统级依赖关系:
{
....
"peerDependencies": {
"chai": "1.x"
}
....
}
对于非NPM包,通常的模式是在应用程序启动流程中检查此项,并在不可用时通知用户
回答特定于ffmpeg的问题时,以下内容应该会有所帮助:
/**
* Check for ffmpeg availability
*
* If the FFMPEG_PATH environment variable is set, try to use it.
* If it is unset or incorrect, try to find ffmpeg in the PATH instead.
*
* @method FfmpegCommand#_getFfmpegPath
* @param {Function} callback callback with signature (err, path)
* @private
*/
proto._getFfmpegPath = function(callback) {
if ('ffmpegPath' in cache) {
return callback(null, cache.ffmpegPath);
}
async.waterfall([
// Try FFMPEG_PATH
function(cb) {
if (process.env.FFMPEG_PATH) {
fs.exists(process.env.FFMPEG_PATH, function(exists) {
if (exists) {
cb(null, process.env.FFMPEG_PATH);
} else {
cb(null, '');
}
});
} else {
cb(null, '');
}
},
// Search in the PATH
function(ffmpeg, cb) {
if (ffmpeg.length) {
return cb(null, ffmpeg);
}
utils.which('ffmpeg', function(err, ffmpeg) {
cb(err, ffmpeg);
});
}
], function(err, ffmpeg) {
if (err) {
callback(err);
} else {
callback(null, cache.ffmpegPath = (ffmpeg || ''));
}
});
};
以上代码为。是一个很好的项目,它在ffmpeg之上工作。我相信,它将是您项目的一个很好的参考。您可以将依赖项的不同安装程序打包到您的应用程序中,然后为您的应用程序创建一个自定义安装程序,该安装程序也会按顺序启动依赖项安装程序,或者只是提示用户自行安装依赖项并将其链接到下载页面
有很多资源可用于创建安装程序,请尝试在谷歌上搜索适合您特定平台的
electron installer
。对不起,我来晚了,但以防万一,这仍然是相关的-我专门为此创建了ffbinaries
模块
您可以在npm上查看它,它只需在应用程序启动期间在用户机器上下载二进制文件,平台就会自动被检测到(如果您计划将其包含在某种CI中,您可以覆盖它)。很酷,但正如我看到的,您只需通知用户尚未安装ffmpeg,如果没有安装,我有没有办法安装它?可能是因为过度设计了应用程序逻辑。但你真的想这么做吗?安装这些依赖项是应用程序的责任吗?通常,系统级依赖项会通知用户处理。可能,您可以提供指向ffmpeg下载页面的链接。但我可能不知道你的应用范围。