Grunt相对文件路径通配

时间:2017-01-06 13:14:46

标签: gruntjs grunt-contrib-less

是否可以在文件路径中的目录上部分使用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",
}

有没有办法做到这一点?使用上述语法,它会在星号后停止搜索。

1 个答案:

答案 0 :(得分:0)

实现此目标的一个潜在解决方案是使用grunts --options功能。

通过命令行运行grunt任务时,可以指定其他选项值。

在您的方案中,您可以传递要更改的文件夹名称的版本号。 (即。在您的情况下,您尝试使用星号字符(*)指定的部分)例如,' 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