gruntjs - 具有可变文件名的 grunt-file-creator

标签 gruntjs

我正在尝试使用 https://npmjs.org/package/grunt-file-creator创建一个文件,但我想要一个可变的文件名...

grunt.initConfig({
  file-creator: {
    "test": {
      grunt.config('meta.revision') + "-test.txt": function(fs, fd, done) {
        fs.writeSync(fd, 'data');
        done();
      }
    }
  }
});

grunt.initConfig({
  file-creator: {
    "test": {
      "<%= grunt.config('meta.revision') %>-test.txt": function(fs, fd, done) {
        fs.writeSync(fd, 'data');
        done();
      }
    }
  }
});

似乎不起作用。我怎样才能有一个可变的文件名?我的想法是,我将 git commit ID 设置为 meta.revision 的值。

最佳答案

这是因为 grunt-file-creator 实现了自己的 API,而不是利用标准的 Grunt src/dest API。我建议使用 this.files 而不是 this.data 重写任务,但作者不想使用标准 API 的一个简单修复是更改:

var filepath = item.key;

var filepath = grunt.template.process(item.key);

任务第 34 行:https://github.com/travis-hilterbrand/grunt-file-creator/blob/master/tasks/file-creator.js#L34

否则你将不得不编写一个像这样的黑客解决方法:

grunt.registerTask('fixed-file-creator', function() {
  var taskName = 'file-creator';
  var cfg = grunt.config(taskName);
  Object.keys(cfg).forEach(function(target) {
    var newcfg = {};
    Object.keys(cfg[target]).forEach(function(dest) {
      newcfg[grunt.template.process(dest)] = grunt.config([taskName, target, dest]);
    });
    grunt.config([taskName, target], newcfg);
  });
  grunt.task.run(taskName);
});

然后运行gruntfixed-file-creator

关于gruntjs - 具有可变文件名的 grunt-file-creator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20235840/

相关文章:

gruntjs - Autoprefixer 不为 IE 添加前缀

javascript - 从节点运行 Mocha 测试

javascript - grunt-browserify 路径必须是字符串错误

node.js - 使用 grunt 编译时的内存问题

gruntjs - 文件夹命名 : src & dist vs. src & build, dev & dist

javascript - Uglify 无法用于嵌套的 if-else

angularjs - 使用 Grunt 时删除包 "was not injected in your file"的警告?

javascript - 是否有可能在 angular 和 grunt 中有多个运行 block ?

testing - Mocha 在浏览器中通过测试,在命令行上失败

javascript - 使用 GruntJS 的 AngularJS 开发模式