grunt js任务和文件用多个点命名

时间:2013-05-17 10:31:32

标签: task gruntjs minify

我正在使用这样的一对一映射来处理文件:

    plugins: {
        files: [{
            expand: true,
            src: '*.js',
            cwd: 'Scripts/v1/Plugins',
            dest: 'Scripts/v1/Build/Plugins',
            ext: '.min.js'
        }]
    },

这很好用,直到我开始用文件名中的多个点命名我的文件。 因此,上面的脚本将uglify
4档:
plugins.a.js
plugins.b.js
plugins.c.js
plugins.d.js

到一个文件中:

plugins.min.js

虽然我期待:

plugins.a.min.js
plugins.b.min.js
plugins.c.min.js
plugins.d.min.js

这是预期的行为还是错误? 在任何情况下,如何使用我的命名约定保持一对一的映射。

3 个答案:

答案 0 :(得分:6)

您是否设法找到解决方案? 我检查了他们的github中的所有问题,显然它应该被修复,但我仍然使用最新版本获得相同的行为。

编辑:解决方案是传递rename函数并手动创建文件名

files: {
            src: 'src/hp-lp-<%= pkg.version %>.js',
            dest: 'src/',
            expand: true,
            flatten: true,
            rename: function (dest, src) {
                var folder = src.substring(0, src.lastIndexOf('/'));
                var filename = src.substring(src.lastIndexOf('/'), src.length);

                filename = filename.substring(0, filename.lastIndexOf('.'));

                return dest + folder + filename + '.min.js';
            }
        }

答案 1 :(得分:4)

目前是默认的预期行为。

这已经被grunt提出了几次:

在第一个链接中,我们已向node globule提交了一项更改,您可以选择第一个或最后一个点。

除此之外(或直到那个地方)你可以使用重命名功能来获得你需要的行为。

答案 2 :(得分:3)

使用extDot而不是ext:

在Grunt中,您可以使用多个点匹配文件名,并写入包含原始点序列的文件名,文件扩展名除外。

/path/to/module.somename.scss -> /path/to/module.somename.css

实施例

files: [{
  expand: true,
  src: ['public_html/**/*.scss'],
  extDot: 'first',
  rename  : function (dest, src) {

    var _new_ext = 'css';

    //Get src filename
    src = src.split("/");
    var filename = src.pop();

    //Apply new extension to filename
    var arr  = filename.split(".");
    arr.pop();
    arr.push(_new_ext);
    filename = arr.join(".");

    dest = dest || src.join("/");

    return dest + '/' + filename;
  }
}]

要点: https://gist.github.com/tecfu/f84a65ffa850a0bc2e88