电子如何处理全局依赖性

时间:2016-08-07 05:56:20

标签: electron

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

4 个答案:

答案 0 :(得分:0)

试试这个,它不是特定于电子,但可以提供帮助 http://12factor.net/dependencies

答案 1 :(得分:0)

可能存在两种系统级依赖关系:

  1. 基于NPM的软件包预计将安装在系统级别
  2. 非NPM包,如系统级库(在您的情况下为ffmpeg)
  3. 对于基于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 || ''));
      }
        });
      };
    

    以上代码为taken from herenode-fluent-ffmpeg是一个很好的项目,可以在ffmpeg之上运行。我相信,这对您的项目来说是一个很好的参考。

答案 2 :(得分:0)

您可以使用您的应用程序打包依赖项的不同安装程序,然后为您的应用程序创建一个自定义安装程序,该安装程序也会按顺序启动依赖项安装程序,或者只是提示用户自己安装依赖项并将它们链接到下载页面。

有很多资源可用于创建安装程序,请针对您的特定平台尝试谷歌搜索electron installer

答案 3 :(得分:0)

抱歉,我迟到了,但为了以防这仍然相关 - 我已经专门为此创建了ffbinaries模块。

您可以在npm上查看它,它只需在应用程序启动期间在用户计算机上下载二进制文件,该平台将自动检测到(如果您计划将其包括在内,您可以覆盖它)某种CI。)