electron如何处理全局依赖关系

electron如何处理全局依赖关系,electron,Electron,我是电子新手。我正在构建一个使用ffmpeg和sox的应用程序,它们在全球范围内安装。如何保证这些依赖项将安装在用户计算机上 试试这个,它不是电子特有的,但有帮助 可能存在两种系统级依赖关系: 预计将在系统级安装基于NPM的软件包 非NPM包,如系统级库(在您的示例中为ffmpeg) 对于基于NPM的包,您可以执行如下对等依赖: { .... "peerDependencies": { "chai": "1.x" } .... } 对于非NPM包,通常的模式是在应用程

我是电子新手。我正在构建一个使用ffmpeg和sox的应用程序,它们在全球范围内安装。如何保证这些依赖项将安装在用户计算机上

试试这个,它不是电子特有的,但有帮助
可能存在两种系统级依赖关系:

  • 预计将在系统级安装基于NPM的软件包
  • 非NPM包,如系统级库(在您的示例中为ffmpeg)
  • 对于基于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下载页面的链接。但我可能不知道你的应用范围。