【问题标题】:Grunt uglify : Weird behaviorGrunt uglify:奇怪的行为
【发布时间】:2015-02-19 20:09:23
【问题描述】:

我不明白为什么 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个字符串它不起作用所以......

感谢您的帮助!

【问题讨论】:

    标签: gruntjs grunt-contrib-uglify


    【解决方案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?

    【讨论】:

    • 感谢您的回答 gadr90 :)。我阅读了这两个主题,确实它们与我的问题有关。但还是……我不明白。我怎样才能拥有 uglify 的动态名称文件?
    • 我觉得这个很愚蠢,我花了 3 个小时寻找想法但没有任何工作。
    • 嘿,@Maxime,没有愚蠢的问题!我认为您没有意识到 grunt 配置对象就是这样 - 一个对象。您不需要内联声明它。看看我的扩展答案是否更合适,恭喜你的决心!
    • 你可以在之前声明你的整个配置,如果你愿意,可以在最后一行调用initConfig :)
    • 我在 initConfig 之前声明了配置,现在它可以工作了! :D !!非常感谢gadr90,我检查了你的博客,你写了有趣的文章!继续前进 ! (你救了我的夜晚哈哈)。铅标记为已解决;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多