concat之后我有javascript:
Tasks={a:1,b:2},Tasks.Test={a:1,b:2},Tasks.Test.TestA={a:1,b:2},Tasks.TestB={a:1,b:2};
但我想:
Tasks={a:1,b:2,Test:{a:1,b:2,TestA:{a:1,b:2}},TestB:{a:1,b:2}};
我怎么能用grunt做到这一点?
答案 0 :(得分:0)
Minifiers不应该改变代码的执行方式。因此,如果您想要一个不同的结构,请以不同的方式构建您的对象。
我们假设你从这开始:
var Tasks = {a:1,b:2};
Tasks.Test = {a:1,b:2};
if (shouldIncludeTestA()) {
Tasks.Test.TestA = {a:1,b:2};
}
if (shouldIncludeTestB()) {
Tasks.TestB = {a:1,b:2};
}
现在构建这样的对象的唯一原因是,如果某些部分是动态的,那么它们可能会在运行时更改。例如,如果Tasks.Test.TestA
有时是空白的,有时候是一个包含更多数据的对象。
因此,如果您拥有控制对象构建方式的代码,您显然无法将其压缩为单个对象文字,因为这意味着剥离控制对象创建方式的代码。
另一方面,如果您的对象每次都具有相同的结构,只需将其构建为单个对象文字,它将缩小为单个对象文字。
var Tasks = {
a: 1,
b: 2,
Test: {
a: 1,
b: 2,
TestA: {
a: 1,
b: 2
}
},
TestB: {
a: 1,
b: 2
}
};
压缩器/缩放器非常努力不改变代码的逻辑。因此,如果您的逻辑构建了一个包含多个语句的对象,那么您的缩小代码将包含多个语句。
所以在我看来,你期望minifier做一些它永远不会做的事情,并且它永远不应该做。