1

尝试在 grunt 文件中使用预定义的数组,认为 usingthis.js_paths会起作用,但似乎不起作用,因为在尝试丑化脚本时出现错误“无法读取未定义的属性 IndexOf”。如何将js_paths变量src正确链接到 files 属性,而不是将数组复制到文件中。想在顶部单独定义它。这可能吗?

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 还是有点新意

4

1 回答 1

1

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

模板

当任务从配置中读取它们时,使用分隔符指定的模板<% %>将自动扩展。模板以递归方式扩展,直到不再存在。

本质上,更改this.js_paths'<%= js_paths %>'您的uglify任务。

例如:

// ...
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,
        }
    }
}
于 2020-07-27T08:33:01.293 回答