Gruntfile.js中的Javascript变量?

17

我正在维护一个广泛使用Grunt的Web应用程序。 我必须在不同的时间将我的HTML,CSS,JS文件压缩,复制到不同的位置。为了使它更容易,我在我的GruntFile.js中创建了一个简单的JavaScript变量,如下所示:

var path="C:/dist";

uglify: {
    options: {
       mangle: false
     },
     my_target: {
       files: {
        path+'/js/jsFile.js': ['src/js/jquery-1.10.2.min.js']
        }
     }          
}

构建时出现以下错误:

>> SyntaxError: Unexpected token +

我不能在我的 GruntFile.js 中使用路径变量吗?因为我有10个位置路径。

2个回答

47

另一种方法是利用Grunt模板:

grunt.initConfig({
  path: 'C:/dist/',
  uglify: {
    options: {
      mangle: false
    },
    '<%= path %>js/jsFile.js': ['src/js/jquery-1.10.2.min.js']
  }          
});

1
这个。这就是用_grunt方式_来做的方法。 - Evan Davis
同样地:http://chrisawren.com/posts/Advanced-Grunt-tooling#Using-variables-in-your-configuration - Hugo
我一直使用 [variable + 'string']: value,但突然间它停止工作了。这个答案为我解决了问题。 - ESR

2

JavaScript对象的格式不允许将变量作为实际键:

path+'/js/jsFile.js'

您可以使用以下代码:

var path = "C:/dist";

var files = {};
files[path+"/js/jsFile.js"] = ['src/js/jquery-1.10.2.min.js'];

//...
options: {
   mangle: false
 },
 my_target: {
   files: files
 }          

您可以在这里看到使用变量作为键的几个示例:

如何从变量设置JS对象属性名称


JavaScript对象表示法,同样的事情。 - helion3
1
不,它不是JSON,甚至没有试图成为JSON。它是一个JavaScript对象字面量。这两者并不可互换。 - user229044
4
抱歉,不行。JSON是JavaScript的一个严格子集,旨在对分层数据进行序列化处理。这不是JSON,而是一个大的JavaScript对象。二者完全不同。 "JS对象"不能用于"JSON预期"的地方。这是没有意义的。你不能用JavaScript对象字面量替换JSON。这很重要,词语有意义,计算机对这种事情非常挑剔。 - user229044
好的,我没有表达清楚我的意思,我非常抱歉。我从来没有想过要暗示JSON等同于Javascript对象。我在使用名称时犯了一个错误,我本意是指“javascript对象”,类似于人们通常将“ajax”一词用于不涉及XML等的异步请求。 - helion3
2
JSON是一种与语言无关的文本数据交换格式,类似于XML、CSV或YAML。JavaScript对象字面量是JavaScript语言中非常特定的句法构造。仅仅因为它们看起来相似并不意味着它们是相同的。而且如果使用术语不正确,只会增加对这个话题已经存在的困惑。编辑 我在手机上打字比较慢 ;) - Felix Kling
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接