在Gruntfile.js中使用变量

时间:2018-10-24 11:20:11

标签: variables gruntjs

我有一个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纳入了另一项工作正常的任务中。附有屏幕截图:

Variable Year in Gruntfile

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

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

产生的结果是完全不删除任何文件。

但是我尝试了以下console.log,grunt.initConfig()外部

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

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

如何在Gruntfile中合并变量?

1 个答案:

答案 0 :(得分:1)

如果您想像这样使用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']);

};