Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ss brokes some minified js code #69

Closed
yazonnile opened this issue Mar 22, 2016 · 11 comments
Closed

ss brokes some minified js code #69

yazonnile opened this issue Mar 22, 2016 · 11 comments
Assignees
Labels

Comments

@yazonnile
Copy link

Have some problems that ss brokes some minified js code
jquerymin for example

input

#{ template core() }
L="[\\x20\\t\\r\\n\\f]"
#{/}

output

L="[\x20\t\r\n\f]"

Maybe I need some filter or renderMode?
was trying raw
But got another error :))

ReferenceError: document is not defined

@yazonnile yazonnile changed the title Scre ss brokes some minified js code Mar 22, 2016
@yazonnile
Copy link
Author

Got another

< style
    += jqueryui.styles()

@trikadin
Copy link

Лол, чувак, что ты пытаешься сделать?

@kobezzza
Copy link
Contributor

cdata should help

#{ template core() }
#{cdata}
L="[\\x20\\t\\r\\n\\f]"
#{/cdata}
#{/}

@kobezzza
Copy link
Contributor

But why not just attach JS and CSS as an external file?

- script js file = foo.js
- link css href = foo.css

@yazonnile
Copy link
Author

Лол, чувак, что ты пытаешься сделать?
Блин. Прям автоматика какая-то - на гите на англ создавать ищью и обсуждать :)

Я делаю конструктор.
На вход он принимает набор конфигов и отдает структуру файлов и папок.
Есть несколько модов, которые отличаются тем, что тот же набор конфигов на выходе по разному группируются по папкам и файлам.

Тот же 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 и пока с этим проблемы :(

@trikadin
Copy link

Вообще, у 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;
        };
    })()
});

Ну, правда, тебе его там подгонять придётся, наверное, но вряд ли сильно.

@trikadin
Copy link

Создал в слаке канал consulting, можно писать туда)
https://snakeskin.slack.com/messages/consulting/

@kobezzza
Copy link
Contributor

Я просто не понимаю, зачем вообще может пригодится создавать шаблон в который текстом вставлять минифицированный жиквери и отдавать его текстом :)

Но вообще для таких задач, используется 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')

Как вариант.

@kobezzza
Copy link
Contributor

#{ template core() } - расширенный режим чуток помог, что мне не нужно следить за отступами, как в jade-like, но как оказалось он режет символы.

Он не режет символы, просто СС управляет текстом, а о природе этого текст он ничего не знает. Ты скормил ему кусок JS-а и хочешь чтобы СС знал что это JS и т.д. но для SS это простой plain text, где \\n парсится как \(экранирующий слеш)\(простой слеш)n(просто символ).

@yazonnile
Copy link
Author

Создал в слаке канал consulting, можно писать туда)
не пускает туда. Можете меня туда пригласить? yazonnile@gmail.com

@kobezzza
Copy link
Contributor

Исправлено. Спасибо @yazonnile

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants