Grunt 相对文件路径通配
Grunt relative file path globbing
是否可以在文件路径中的目录上部分使用 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",
}
有办法吗?使用上述语法,它会在星号后停止搜索。
实现此目的的一个潜在解决方案是利用 g运行ts --options 功能。
当运行通过命令行执行 g运行t 任务时,可以指定额外的 选项 值。
在您的方案中,您可以传入要更改的文件夹名称的版本号。 (即在您的情况下,您尝试使用星号字符 (*
) 指定的部分,例如 '5.1.1.5830'
警告:要使该解决方案有用,它确实需要知道该值是什么,(版本号),在通过命令行 运行 执行任务之前预先确定目标文件夹。
示例Gruntfile.js
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']);
};
运行正在执行 ProcessLess 任务
运行通过命令行执行任务如下:
$ 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
。
是否可以在文件路径中的目录上部分使用 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",
}
有办法吗?使用上述语法,它会在星号后停止搜索。
实现此目的的一个潜在解决方案是利用 g运行ts --options 功能。
当运行通过命令行执行 g运行t 任务时,可以指定额外的 选项 值。
在您的方案中,您可以传入要更改的文件夹名称的版本号。 (即在您的情况下,您尝试使用星号字符 (*
) 指定的部分,例如 '5.1.1.5830'
警告:要使该解决方案有用,它确实需要知道该值是什么,(版本号),在通过命令行 运行 执行任务之前预先确定目标文件夹。
示例Gruntfile.js
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']);
};
运行正在执行 ProcessLess 任务
运行通过命令行执行任务如下:
$ 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
。