kobezzza,
у меня тут небольшая проблема, не подскажешь, что за магия творится?) Решил я использовать уже компилированные SS-файлы в Ноде(вместо живой компиляции). Итак, действующие лица: gulpfile.js /app/views/index.ss /app/views/index.ss.js app.js Сожержимое gulpfile.js: //... gulp.task('views', function() { gulp.src([ 'путь_к_исходнику/' + 'index.ss']) .pipe(concat('index.ss')) //на будущее, когда будет много файлов .pipe(gulp.dest('app/views')) .pipe(snakeskin({ prettyPrint: true })) .pipe(gulp.dest('app/views')); }); // ... Содержимое index.ss (упростил для примера): {template text(a)} {a} {end} Сожержимое app.js: var tpls = require(__dirname+'/app/views/index.ss.js').init(require('snakeskin')); console.log(tpls.text('ss.js')); Запускаю скрипт, а консоль меня посылает C:\dev\test>node app.js C:\dev\test\app\views\index.ss.js:7 var $C = this.$C != null ? this.$C : Snakeskin.Vars.$C, ^ ReferenceError: Snakeskin is not defined at Object.<anonymous> (C:\dev\test\app\views\index.ss.js:7:42 ) at Object.<anonymous> (C:\dev\test\app\views\index.ss.js:164: 4) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (C:\dev\test\app.js:18:12) at Module._compile (module.js:456:26) Но это ещё не всё. В app.js пишу следующее: var snakeskin = require('snakeskin'); var tpls = snakeskin.compileFile(__dirname+'/app/views/index.ss'); console.log(tpls.text('ss')); Запускаю файл - работает. Но и это ещё не всё, снова пишу: var tpls = require(__dirname+'/app/views/index.ss.js').init(require('snakeskin')); console.log(tpls.text('ss.js')); Запускаю. И это теперь тоже работает. Казалось бы, Редачу файл index.ss (или просто жму Ctrl+S в Sublime), Gulp подхватывает изменения, запускаю app.js и снова вылетает ошибка. И такой баг(?) повторяется только при использовании уже компилированного шаблона, при живой компиляции такой проблемы нет. Не знаю в чём именно проблема, но раз ошибку выдаёт SS, то решил написать сюда. |
Цитата:
snakeskin({ prettyPrint: true, exports: 'commonJS' }) А не работает, потому что компиляция делается с глобальным экспортом, а ты запускаешь в ноде. (До версии 6 это делалось с помощью флага .commonJS) Цитата:
https://github.com/kobezzza/Snakeskin/wiki/include Цитата:
PS: кстати, в SS CLI API есть свой вотчер, но в отличии от того же галпа, он работает с графом отношений файлов, т.е. если обновить, например, файл локализации, который подключён в шаблон, то он перекомпилит его. https://github.com/kobezzza/Snakeski...0%BE%D0%B5-API Скомпилить все шаблоны в папке и сохранить в другую папку результат, задать вотчер. snakeskin ./myTpls/ -o './compile/%file%.js' --watch |
Цитата:
|
kobezzza,
Цитата:
Цитата:
Цитата:
|
kobezzza,
у меня проблема за проблемой :D Разбросал файлы так: Галп //... gulp.task('views', function() { gulp.src([path.join(paths.src.views, 'index.ss')]) .pipe(snakeskin({ prettyPrint: true, exports: 'commonJS' })) .pipe(gulp.dest('app/views')); }); //... index.ss {include 'main.ss'} {include 'article.ss'} main.ss {template main.home(articles)} <!DOCTYPE html> <html> ///всякий html... {block content} {forEach articles => article} ///всякий html... {/forEach} {/block} </section> ///всякий html... </html> {end} article.ss {template article(data) extends main.home} <!DOCTYPE html> <html> ///всякий html {block content} ///всякий html {/block} ///всякий html </html> {end} Вотчер галпа следит за изменениями всех *.ss и вызывает SS при оных. Проблема: изменяю шаблон > сохраняю его > перезапускаю app.js но изменений на странице не видно(так же как и ошибок). Перезапускаю сам Галп, потом app.js и только тогда изменения видны. SS по какой-то причине не подхватывает изменения в подключаемых шаблонах. Скорее всего я не так их подключил. |
Не совсем понятно, если я правильно тебя понял, то ситуация такая: есть файл А в него включается файл Б, и при обновлении файла Б ничего не происходит. Если это так, то это вина галпа, т.к. он не знает про граф отношений и тут нужен --watch SS, т.к. он обновляет файлы в таком случае.
ЗЫ: если можешь, то запиши видео с работой, чтобы было проще понять. |
kobezzza,
Цитата:
Цитата:
gulp.task('views', function() { gulp.src([path.join(paths.src.views, 'index.ss')]) .pipe(snakeskin({ prettyPrint: true, exports: 'commonJS' })) .pipe(gulp.dest('app/views')); }); который отдаёт index.ss СнэйкСкину, и СС уже смотрит на содержимое и подключает указанные инклуды. По моей логике так должно быть. Или я ошибаюсь? Цитата:
|
Кажется понял в чём дело, задай параметр
{ prettyPrint: true, exports: 'commonJS', cache: false } Если поможет, то я потом обновлю плагины: сделаю этот параметр по умолчанию отключённым. |
kobezzza,
да, это оно. Спасибо ещё раз, теперь проблем нет) |
Выпустил патчи для плагинов Grunt и Gulp.
*** По поводу ошибки с Цитата:
snakeskin ./myTpls/ -o "./compile/%file%.js" --watch Что касается URL, то можно юзать любую нотацию, т.к. в CLI она приводится к единому виду. |
kobezzza,
Цитата:
{ prettyPrint: true, exports: 'commonJS', cache: false }то обновляться не обязательно? Цитата:
Мб в название темы добавить "SnakeSkin", чтобы сразу было понятно про что она? |
Цитата:
Цитата:
Цитата:
|
Выпустил патч SS 6.0.4.
|
Начал потихоньку пилить общую статью для хабры:
https://github.com/kobezzza/kobezzza...r/snakeskin.md Буду рад критики, т.к. писатель я тот ещё :) |
kobezzza,
да её даже не обязательно писать, просто собрать куски доков в один и всё :D Пока всё годно, но если статья планируется большой, то можно куда-нибудь в начало поместить "Содержание". |
Обновил плагины для grunt и gulp - была исправлена ошибка при работе в режиме exec.
|
Выпустил патч SS 6.0.6
|
Выпустил SS 6.1.3
Добавлена поддержка масок для include - include '/tpls/**/*.ss' |
Выпустил большой патч SS 6.2.0.
|
На этой странице https://github.com/kobezzza/Snakeski...%D 0%B8%D1%8F
обнаружил ссылку ведущую на 404 https://github.com/kobezzza/Snakeski...in.live.min.js |
Спасибо, забыл обновить: я поменял папку сборки с build на dist, как принято в bower пакетах
|
kobezzza,
а можно нубский вопрос? Как использовать скомпилированные шаблоны на клиенте? :D В доке примера не нашёл. Подключаю так: <script src="/snakeskin.live.min.js"></script> <script src="/index.ss.js" type="text/x-snakeskin-template"></script> Но функции из шаблона не доступны глобально. |
Ты наверное устал :)
Кто же подключает JS файл с таким типом type="text/x-snakeskin-template", не мудрено, что не работает, т.к. браузер просто игнорирует это. Делай так: <script src="/snakeskin.live.min.js"></script> <script src="/index.ss.js"></script> text/x-snakeskin-template нужен, если ты описываешь инлайн шаблоны <script src="/snakeskin.live.min.js"></script> <script type="text/x-snakeskin-template"> - template foo() ... </script> |
kobezzza,
Цитата:
Цитата:
ReferenceError: global is not defined ведущая к 5-й строке index.ss.js var Snakeskin = global.Snakeskin; |
Ты уверен, что у тебя не exports = 'commonJS' экспорт?
Для клиентских шаблонов экспорт должен быть другим, т.е. без такого экспорта. Цитата:
|
kobezzza,
он самый .pipe(snakeskin({ prettyPrint: true, exports: 'commonJS', cache: false })) Вот блин, я то думал его так можно использовать) Получается, нужно в двух "форматах" экспортировать файлы, чтобы оно везде работало(?) Сейчас так сделал - всё работает. Сейчас глянул в доку к плагину, как я понимаю, параметр exec это прошлый cache? //Мб лучше описать параметр exports в доке? |
Цитата:
https://github.com/kobezzza/Snakeskin/issues Цитата:
Параметры tpl и data также относятся к exec. Цитата:
*** Кстати, задавай вопросы лучше в issue на гитхаб, вдруг у кого ещё такие проблемы будут, а так типо FAQ будет. |
kobezzza,
Цитата:
Моя плохая привычка - чтобы посмотреть доки, лезу на страницу галп-плагину, а не к самому модулю) Цитата:
Спасибо, в очередной раз) |
Цитата:
|
kobezzza,
так там же не все параметры, того же commonJS нету. Или я уже того, и не вижу его.. *ушёл спать* |
Цитата:
commonJS (параметр) был удалён в версии 6, а вместо него добавлен exports и он там есть, будь внимательнее :) |
|
kobezzza,
Цитата:
Судя по наличию gulpfile.js в репо, ты всё таки перешёл с Гранта на Галп) |
Цитата:
|
kobezzza,
а как же декларативный подход Гранта, который тебе удобнее и всё такое?) Всё таки реклама тут и годные статьи на Хабре сломили твою волю! Цитата:
|
Цитата:
|
Почти закончил работу над 6.3.0 - идёт тестирование.
Пример 2-х новых фич: интерполяция тега и липкие ссылки - forEach data => @el, i, data, isFirst < li.b-item < a.&__link[.&_active_#{isFirst}] href = #{@href} {@label} Первая ячейка отрендерится как: <li class="b-item"> <a class="b-item__link b-item__link_active_true" href="...">...</a> </li> Это просто офигенно удобно :) https://github.com/kobezzza/Snakeskin/issues/8 *** Также был разработан универсальный формат экспорта, теперь нет необходимости компилить шаблоны отдельно для ноды и браузера. |
kobezzza,
Цитата:
|
Цитата:
|
kobezzza,
ну да, лучше не спешить в этом деле) |
Часовой пояс GMT +3, время: 17:09. |