是否可以在文件路径中的目录上部分使用Globbing?
我设置了grunt-contrib-less任务,我的任务的文件路径如下所示:
files: {
"../../application/user/themes/some-theme-5.1.1.5830/css/main.css": "less/base.less",
}
但是,相对路径中的版本号可能会有时更改,例如:
files: {
"../../application/user/themes/some-theme-5.1.1.5831/css/main.css": "less/base.less",
}
理想情况下,我想要这样的事情:
files: {
"../../application/user/themes/some-theme-*/css/main.css": "less/base.less",
}
有没有办法做到这一点?使用上述语法,它会在星号后停止搜索。
答案 0 :(得分:0)
实现此目标的一个潜在解决方案是使用grunts --options功能。
通过命令行运行grunt任务时,可以指定其他选项值。
在您的方案中,您可以传递要更改的文件夹名称的版本号。 (即。在您的情况下,您尝试使用星号字符(*
)指定的部分)例如,' 5.1.1.5830'
警告 :要使此解决方案有用,它确实需要知道目标文件夹的值(版本号)是什么在通过命令行运行任务之前。
module.exports = function(grunt) {
grunt.initConfig({
themesFolder: {
namePart: '0.0.0.0' // <-- If no option is passed via the CLI this name will be used.
},
less: {
production: {
options: {
// ...
},
files: {
// The destination path below utilizes a grunt template for the part
// of the folder name that will change. E.g. '5.1.1.0'
'../../application/user/themes/some-theme-<%= themesFolder.name %>/css/main.css': 'less/base.less'
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-less');
grunt.registerTask('saveFolderNameFromOption', 'Uses the option provided to configure name part.', function(n) {
var themesFolder = grunt.option('themesFolder');
if (themesFolder) {
// Store the option value so it can be referenced in the less task.
grunt.config('themesFolder.namePart', themesFolder);
}
});
grunt.registerTask('processLess', ['saveFolderNameFromOption', 'less:production']);
};
通过命令行运行任务,如下所示:
$ grunt processLess --themesFolder=5.1.1.5830
注意:指定的附加选项。即:--themesFolder=5.1.1.5830
使用上述命令时,.css
输出将定向到以下路径:
'../../application/user/themes/some-theme-5.1.1.5830/css/main.css': 'less/base.less'
现在,每次运行任务时都会相应地修改选项。
好处:通过CLI提供版本号作为选项,可以避免每次运行时都重新配置Gruntfile.js
。