在 Gruntfile.js 中使用变量

Using variables in Gruntfile.js

我有一个 Gruntfile.js,其中 我有一个重复多次的字符串 。所以我决定继续使用一个变量,因此我引入了 var file_path.

module.exports = function(grunt) {

    'use strict';

    var today = new Date();
    var year  = today.getFullYear();

    var file_path = 'here/there/';

    grunt.initConfig({

        jshint: {
            all: [
                '<%= file_path %>/assets/js/app.js',
                '<%= file_path %>/admin/assets/js/admin.js',
            ]
        },

    });

    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', ['jshint']);

};

但它不起作用。抛出以下错误:

Running "jshint:all" (jshint) task
Warning: An error occurred while processing a template (file_path is not defined). Use --force to continue.

当我将 <%= file_path %> 更改为 <%= this.file_path %> 时,进程运行但路径未解析。

Running "jshint:all" (jshint) task
>> 0 files linted. Please check your ignored files.

对于其他已注册的任务,已确认,No source files were found.

顺便说一句,我将 year 合并到另一个工作正常的任务中。附上截图:

所以,我在 jshint 任务中尝试了相同的语法,如下所示:

all: [
    file_path +  'assets/js/app.js',
    file_path +  'admin/assets/js/admin.js',
]

它产生的结果与根本不检查任何文件的结果相同。

但是我尝试了以下 console.log,outside of grunt.initConfig():

grunt.log.write(file_path + 'assets/js/app.js');

它显示文件的正确串联路径:here/there/assets/js/app.js

如何将变量合并到 Gruntfile 中?

如果您想像这样使用 Template strings

all: [
    '<%= file_path %>/assets/js/app.js',
    '<%= file_path %>/admin/assets/js/admin.js',
]

然后将您的 Gruntfile.js 配置为:

module.exports = function(grunt) {

    'use strict';

    var today = new Date();
    var year  = today.getFullYear();

    grunt.initConfig({
        file_path: 'here/there', 
        //                    ^-- Note: there is no trailing forward slash.

        jshint: {
            all: [
                '<%= file_path %>/assets/js/app.js',
                '<%= file_path %>/admin/assets/js/admin.js',
            ]
        }

    });

    require('load-grunt-tasks')(grunt);

    grunt.registerTask('default', ['jshint']);

};