2016-12-07 8 views
0

, как я выяснил, uglifyJS игнорирует скрытые двойные кавычки в одной строке кавычек.Не избегайте двойных кавычек

'test \" + foo + \"' 

приводит

'test " + foo + "' 

Это просто неправильное поведение.

У меня есть .js, который я хочу минимизировать, и эти данные должны войти в JSON. Но API JSON должен быть таким.

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

не

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

Есть ли способ настроить uglifyJS, что он не игнорировать \"

На данный момент я уродовать мой JavaScript и заменить все мои \" с заполнителями. После этого я заменю строку на все заполнители, чтобы заставить ее работать. Но тогда мои тесты не работают.

EDIT: уродовать версия моего Javascript должен быть действительным JSON и действительным Javascript, а также.

EDIT: В соответствии с запросом, часть настоящего примера. Этот код должен быть очищен, а затем помещен в JSON.

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

уродовать версия будет

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>'') 
+3

«Это это просто неправильное поведение »- это не так. В JavaScript в этом контексте оба утверждения означают одно и то же. Ваша проблема в том, что вы зависите от конкретного форматирования JS, чтобы вы могли выстроить JSON из него, объединив строки. Вместо этого используйте соответствующую библиотеку JSON. – Quentin

+1

'JSON.stringify ({string: 'test" + foo + "'})' – coyotte508

+0

Это не проблема. Я динамически создаю '.js', который я хочу отправить на мой сервер. API моего бэкэнда принимает только JSON. Поэтому я отправляю в него действительный JSON с символом '.js' в виде строки. Но в этой строке '.js' мне нужны экранированные двойные кавычки, иначе они не работают. – DK1990

ответ

0

Существует формат github issue о формате цитаты.

Решение дано в ссылке выше, чтобы сказать уродовать, чтобы сохранить оригинальный формат цитаты:

$ 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'); 

Или с глотком, дать следующее в качестве параметра функции uglify.minify():

{ output: { quote_style: 3 } } 

Для вашей конкретной проблемы, поскольку я не уверен, что она сохранит ненужные escape-символы (в javascript), решением будет:

  • удалить все одиночные кавычки из JavaScript, переключая все в двойные кавычки и избежать их в случае необходимости
  • уродовать код с указанным параметром
  • сделать {string: JSON.stringify(code)}

Если ваш Javascript код должен иметь одиночные кавычки по какой-то причине вместо этого вы можете заменить двойные кавычки в сгенерированном html в javascript-коде на &#34; или &quot;.

Обратите внимание, что я не чувствую, что что-то вроде var a = 'abc \" def'; действительно является javascript в первую очередь.

Еще одна вещь, на которую нужно обратить внимание, это то, как вы включаете файл (он не упоминается), может быть, есть лучший способ, который напрямую загружает файл в строку, на которой вы можете позвонить JSON.stringify().

Редактировать

Если вы используете последнюю JavaScript двигателя, вы можете также использовать backquotes (`) в коде и заменить двойные или одинарные кавычки ими.

Или, если нет никакого $ ни обратных кавычек в вашем яваскрипта кода, вы можете просто сделать:

{ 
    string: JSON.stringify(`uglified javascript code`) 
} 
Смежные вопросы