Grunt uglify:奇怪的行为

时间:2015-02-19 20:09:24

标签: gruntjs grunt-contrib-uglify

我无法弄清楚为什么uglify不希望将concat字符串作为输入或输出......

这有效:

uglify: {
    dev_uglify_js: {
        files: {
            'my_file.min.js': ['my_file.js']
        }
    }
}

例如,这不起作用:

uglify: {
    dev_uglify_js: {
        files: {
            'my'+'_file.min.js': ['my_file.js']
        }
    }
}

你知道为什么吗? 输出错误是“SyntaxError:Unexpected token”。

这里真正的兴趣是将时间戳连接到文件名。 但只有2个字符串它不起作用...

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在JavaScript中,对象key无法动态声明。这不是gruntuglify的问题 - 这是语言约束。

myObject = { 'a' + 'b' : 'b' } // NOPE!

但是,可以通过方括号访问任何对象属性。例如:

myObject = { 'banana': 'boat' }
myObject.banana // boat
myObject['banana'] // boat!

因此,可以在使用方括号语法创建对象后添加属性。

myObject = {} 
myObject[ 'a' + 'b' ] = 'b' // Yes
myObject.ab // b

Gruntfile示例

在您的Gruntfile中,您必须在某个时候调用grunt.config.initgrunt.initConfig之类的内容。这通常是内联完成的:

grunt.initConfig({
  uglify: {} // properties ...
});

但是,initConfig只是接收一个对象。您可以在调用此函数之前定义它并根据需要对其进行操作。所以,例如:

var config = { uglify: {} };
config.uglify['such'+'dynamic'+'very'+'smarts'] = {};
grunt.initConfig(config);

类似的问题:

How do I create a dynamic key to be added to a JavaScript object variable

How do I add a property to a JavaScript object using a variable as the name?