ss brokes some minified js code
Closed this issue · 11 comments
Лол, чувак, что ты пытаешься сделать?
cdata should help
#{ template core() }
#{cdata}
L="[\\x20\\t\\r\\n\\f]"
#{/cdata}
#{/}
But why not just attach JS and CSS as an external file?
- script js file = foo.js
- link css href = foo.css
Лол, чувак, что ты пытаешься сделать?
Блин. Прям автоматика какая-то - на гите на англ создавать ищью и обсуждать :)
Я делаю конструктор.
На вход он принимает набор конфигов и отдает структуру файлов и папок.
Есть несколько модов, которые отличаются тем, что тот же набор конфигов на выходе по разному группируются по папкам и файлам.
Тот же jquery.min может быть как отдельным файлом, так и в составе какого-то файла.
Поэтому такое не подходит But why not just attach JS and CSS as an external file?
Поэтому я для него сделал отдельный шаблон.
#{ template core() }
- расширенный режим чуток помог, что мне не нужно следить за отступами, как в jade-like, но как оказалось он режет символы.
#{cdata}
- на простом примере L="[\\x20\\t\\r\\n\\f]"
работает как надо. Да. Но на реальном большом файле https://code.jquery.com/jquery-1.12.2.min.js скрипт падает
SyntaxError: Octal literals are not allowed in strict mode.
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:414:25)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Module.require (module.js:366:17)
at require (module.js:385:17)
at Object.exports.compileFile (.\dev\node_modules\snakeskin\snakeskin.js:181:10)
По сути мне нужно такой темплеит, который вот как введено - так и отдает. Я могу что угодно написать. Ему неважно. Для темплеита это будет raw текст, который просто надо отдать as is и пока с этим проблемы :(
Вообще, у SS есть слак. Можно писать там, это быстрее будет, наверное)
https://snakeskin.slack.com/
Во-вторых... Ты уверен, что тебе вебпак не подойдёт больше?
В-третьих, когда мне нужно было инлайнить файлы прямо текстом в шаблон (инлайнил метрику и аналитику) -- как я понимаю, это примерно то, что тебе нужно, я написал для этих целей фильтр, могу подарить его код)
snakeskin.importFilters({
insertFileContent: (() => {
const data = {};
return (filepath) => {
filepath = path.resolve(filepath);
if (data[filepath] && process.env.NODE_ENV === 'production') {
return data[filepath];
}
let content = '';
try {
content = fs.readFileSync(filepath);
} catch (err) {
log.error('File read failed', err);
}
data[path] = content;
return content;
};
})()
});
Ну, правда, тебе его там подгонять придётся, наверное, но вряд ли сильно.
Создал в слаке канал consulting, можно писать туда)
https://snakeskin.slack.com/messages/consulting/
Я просто не понимаю, зачем вообще может пригодится создавать шаблон в который текстом вставлять минифицированный жиквери и отдавать его текстом :)
Но вообще для таких задач, используется cdata, он как раз полностью игнорируется парсером и вставляется как есть, т.е. внутри cdata мы уже не можем использовать другие директивы SS.
#{cdata} - на простом примере L="[\x20\t\r\n\f]" работает как надо. Да. Но на реальном большом файле https://code.jquery.com/jquery-1.12.2.min.js скрипт падает
Внимание на ошибку: падает не SS, а JS парсер, который уже после выполняет файл, т.е. скорее всего проблема именно в самом коде жиквери, а не СС.
Вообще если очень нужно, чтобы шаблон таки отдавал RAW файл, то почему бы просто не грузить его с диска?
- import fs from 'fs'
- template foo()
+= fs.readFileSync('myFile.js')
Как вариант.
#{ template core() } - расширенный режим чуток помог, что мне не нужно следить за отступами, как в jade-like, но как оказалось он режет символы.
Он не режет символы, просто СС управляет текстом, а о природе этого текст он ничего не знает. Ты скормил ему кусок JS-а и хочешь чтобы СС знал что это JS и т.д. но для SS это простой plain text, где \\n
парсится как \(экранирующий слеш)\(простой слеш)n(просто символ)
.
Создал в слаке канал consulting, можно писать туда)
не пускает туда. Можете меня туда пригласить? yazonnile@gmail.com
Исправлено. Спасибо @yazonnile