不要转义双引号
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 中的双引号替换为 "
或 "
.
请注意,我不认为像 var a = 'abc \" def';
这样的东西首先是有效的 javascript。
另一件要研究的事情是你如何包含文件(它没有提到),也许有更好的方法直接将文件加载到一个字符串中,然后你可以调用 JSON.stringify()
.
编辑
如果您使用最新的 javascript 引擎,您也可以在代码中使用 backquotes (`) 并用它们替换双引号或单引号。
或,如果你的javascript代码中没有$
或反引号,你可以简单地做:
{
string: JSON.stringify(`uglified javascript code`)
}
你想要:
'test \" + foo + \"'
我发现 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 中的双引号替换为 "
或 "
.
请注意,我不认为像 var a = 'abc \" def';
这样的东西首先是有效的 javascript。
另一件要研究的事情是你如何包含文件(它没有提到),也许有更好的方法直接将文件加载到一个字符串中,然后你可以调用 JSON.stringify()
.
编辑
如果您使用最新的 javascript 引擎,您也可以在代码中使用 backquotes (`) 并用它们替换双引号或单引号。
或,如果你的javascript代码中没有$
或反引号,你可以简单地做:
{
string: JSON.stringify(`uglified javascript code`)
}
你想要:
'test \" + foo + \"'