gruntfile.js中如何正确使用数组变量

How to use array variable properly in gruntfile.js

尝试在 grunt 文件中使用预定义数组,认为使用 this.js_paths 会起作用,但似乎不起作用,因为我收到错误消息“无法读取 属性 IndexOf of undefined" 当试图丑化脚本时。我怎样才能 link js_paths 变量到文件 src 属性 正确而不是将数组复制到文件中。想在顶部单独定义它。这可能吗?

module.exports = function(grunt) {

    // loadNpmTasks from package.json file for all devDependencies that start with grunt-
    require("matchdep").filterDev("grunt-*", './package.json').forEach(grunt.loadNpmTasks);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        js_paths: [
            'inc/header1/js/*.js', 
            '!inc/header1/js/*.min.js', 
            'inc/header2/js/*.js', 
            'inc/header2/js/*.js', 
            '!inc/header2/js/*.min.js',
            'js/*.js', 
            '!js/*.min.js'
        ],

        uglify: {
            options: {
                mangle: true
            },
            build: {
                files: [{
                  expand: true,
                  src: this.js_paths,
                  rename: function(dst, src) {
                    return src.replace('.js', '.min.js');
                  }
                }]
            }
        },
        watch: {
            scripts: {
                files: ['inc/header1/js/*.js', 'inc/header2/js/*.js', 'js/*.js'],
                tasks: ['uglify'],
                options: {
                    spawn: false,
                }
            }
        }
    });

    grunt.registerTask('default', ['uglify', 'watch']);
};

最好在监视文件中使用相同的数组 js_paths(因为那里需要它),是否有意义?对使用 gruntfile.js

还是有点陌生

利用Templates语法。它在文档中描述如下:

Templates

Templates specified using <% %> delimiters will be automatically expanded when tasks read them from the config. Templates are expanded recursively until no more remain.

基本上,在您的 uglify 任务中将 this.js_paths 更改为 '<%= js_paths %>'

例如:

// ...
uglify: {
  options: {
    mangle: true
  },
  build: {
    files: [{
      expand: true,
      src: '<%= js_paths %>',              // <-----
      rename: function(dst, src) {
        return src.replace('.js', '.min.js');
      }
    }]
  }
},
// ...

你的 watch 任务也是如此。

例如:

watch: {
    scripts: {
        files: '<%= js_paths %>',          // <-----
        tasks: ['uglify'],
        options: {
            spawn: false,
        }
    }
}