我正在使用这样的一对一映射来处理文件:
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
这是预期的行为还是错误? 在任何情况下,如何使用我的命名约定保持一对一的映射。
答案 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)
在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;
}
}]