4

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

    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

这是预期的行为还是错误?无论如何,我如何才能与我的命名约定保持一对一的映射。

4

3 回答 3

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';
            }
        }
于 2013-11-12T02:15:42.743 回答
4

这是当前的默认预期行为。

这已经用 grunt 提出了几次:

从第一个链接中,已将更改提交给节点球,您可以选择第一个或最后一个点。

除此之外(或在此之前),您可以使用重命名功能来获得您需要的行为。

于 2013-05-18T04:48:26.847 回答
3

使用 extDot 代替 ext:

在 Grunt 中,这就是您如何将文件名与多个点匹配并写入包含原始点序列的文件名,文件扩展名除外。

IE

/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

于 2014-09-26T08:28:49.847 回答