首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ArchiverJS从git ls文件列表创建Zip存档

使用ArchiverJS从git ls文件列表创建Zip存档
EN

Stack Overflow用户
提问于 2016-05-16 02:38:25
回答 1查看 116关注 0票数 1

我正在尝试使用只包含zip显示的文件的archiverjs来创建一个git ls-files归档文件,而不是一些排除文件。

我获得文件名的代码是

代码语言:javascript
复制
var listFiles = function() {
  var promise = new Promise(function (resolve, reject) {
    var exec = require('child_process').exec;
    var child;

    child = exec("cd ..; git ls-files", function (error, stdout, stderr) {
      if (error !== null) {
        return reject(error)
      }

      var result = stdout.split("\n");
      resolve(result);
    });
  });
  return promise;
};

那么我的实际捆绑功能看起来就像

代码语言:javascript
复制
DeploymentUtil.prototype.CreateApplicationVersionBundle = function (pathToApplication,
                                                                    versionLabel,
                                                                    target) {
  var promise = new Promise(function (resolve, reject) {
      // Create the archive
      var output = fs.createWriteStream(versionLabel + ".zip");
      output.on('close', function () {
        resolve(output);
      });

      var archive = archiver.create("zip");

      // Error handling
      archive.on('error', function (err) {
        reject(err);
      });

      // get the files from git
      listFiles().then(function(files) {
        var exclusions = [
          '!**/.keep',
          '!.codeclimate.yml',
          '!.csslintrc',
          '!.travis.yml',
          '!env_sample',
          '!spec/**'
        ];

        for(var i = 0, l = 9; i < l; i++ ) {
          console.log(files[i]);
        }

        archive.bulk([{
          expand: true,
          cwd: pathToApplication,
          src: files.concat(exclusions),
          dot: true
        }]);

        archive.pipe(output);
        archive.finalize();
      }).catch(reject);
  });
  return promise;
}

运行此archive.bulk会引发一个错误:must provide pattern

但是,如果我用src: files.concat(exclusions)替换[**/**],它就能工作(只是我在存档中得到了很多不想要的文件)。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-16 02:58:56

git ls-file的输出将包含一个终止的换行符。

然后,当在split("\n")上调用result时,您将得到一个数组,其中最后一个元素是空字符串("")。

ArchiverJS可能不喜欢空字符串作为模式。

一种解决方案是在拆分字符串之前修剪它:

var result = stdout.trim().split("\n");

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37245942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档