Grunt uglify :奇怪的行为

Grunt uglify : Weird behavior

我不明白为什么 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 个字符串是行不通的,所以 ...

感谢您的帮助!

在 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?