不要转义双引号

Don't escape double quotes

我发现 uglifyJS 会忽略单引号字符串中的转义双引号。

'test \" + foo + \"'

结果

'test " + foo + "'

这只是一种错误的行为。

我有一个要缩小的 .js,此数据必须进入 JSON。但是JSONAPI就得这样

{
    string: "test \" + foo + \""
}

不是

{
    string: "test " + foo + ""
}

有没有办法配置它不会忽略的 uglifyJS \"

目前我丑化了我的 javascript 并将所有 \" 替换为占位符。在此之后,我用所有占位符替换字符串以使其正常工作。 但是我的测试不起作用。

编辑: 我的 Javascript 的丑化版本必须有效 JSON 并且 Javascript 也有效。

编辑: 根据要求,真实示例的一部分。这段代码必须被丑化然后放入JSON。

var privacylink = '#privacyButtonURL#';
link = '<a href=\"' + privacylink + '\" target=\"_blank\" style=\"color:#4398b5; text-decoration:underline;\">hear</a>';

uglify 版本是

var a="#privacyButtonURL#", b='<a href="'+a+'" target="_blank" style="color:#4398b5; text-decoration:underline;">hear</a>'

这行不通。

JSON.stringify('var a="#privacyButtonURL#", b='<a href="'+a+'" target="_blank" style="color:#4398b5; text-decoration:underline;">hear</a>'')

关于引用格式github issue

上面link给出的解决方案是告诉uglify保留原来的引用格式:

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=1
console.log('foo','bar');

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=2
console.log("foo","bar");

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=3
console.log("foo",'bar');

或使用 gulp,将以下内容作为 uglify.minify() 函数的参数:

{ output: { quote_style: 3 } }

对于您的具体问题,我不确定它是否会保留不必要的转义字符(在 javascript 中),解决方案是:

  • 通过将所有内容切换为双引号并在必要时转义它们,从 javascript 中删除所有单引号
  • 使用上述选项对代码进​​行加粗处理
  • {string: JSON.stringify(code)}

如果您的 javascript 代码出于某种原因必须使用单引号,您可以将 javascript 代码中生成的 html 中的双引号替换为 &#34;&quot;.

请注意,我不认为像 var a = 'abc \" def'; 这样的东西首先是有效的 javascript。

另一件要研究的事情是你如何包含文件(它没有提到),也许有更好的方法直接将文件加载到一个字符串中,然后你可以调用 JSON.stringify().

编辑

如果您使用最新的 javascript 引擎,您也可以在代码中使用 backquotes (`) 并用它们替换双引号或单引号。

,如果你的javascript代码中没有$或反引号,你可以简单地做:

{
    string: JSON.stringify(`uglified javascript code`)
}

你想要:

'test \" + foo + \"'

参考: http://es5.github.io/#x7.8.4