Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Snakeskin (https://javascript.ru/forum/project/35057-snakeskin.html)

kobezzza 04.02.2015 22:40

Цитата:

Сообщение от Zend (Сообщение 354947)
kobezzza,
В чём преимущества перед Jade/TwigJS/EJS?

Вообще, я уже устал об этом рассказывать, всё есть в доке.

1) Поддержка локализации;
2) 2 вида синтаксиса;
3) Поддержка макросов и фильтров;
4) Значительно более мощная система code-reuse;
5) поддержка компиляции как в строку, так и в DocumentFragment
6) Поддержка чанкования;
7) Поддержка асинхронных шаблонов;
8) Поддержка БЭМ;
9) Поддержка модулей;
10) Оптимизация хвтостовой рекурсии, инлайнинг итераторов, инланинг примесей и прочие оптимизации

И ещё куча по мелочи.

Gozar 04.02.2015 22:41

Цитата:

Сообщение от kobezzza
Проверил сейчас у себя, всё ок, относительные пути работают.

Я так понимаю проблема останется нерешенной :)

nodejs модули подключаются относительно файла в котором require, а snakeskin.compileFile относительно корня сервера.

Цитата:

Сообщение от kobezzza
На видео рассматривается настройка FileWatcher под WS, а ты что хочешь?

Теперь, я понял что нужно https://github.com/kobezzza/Snakeski...0%BE%D0%B5-API, но в видео про это ни слова. Ты в видео ставишь как модуль, а вотчера там нет!

kobezzza 04.02.2015 22:48

Цитата:

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

Цитата:

Теперь, я понял что нужно https://github.com/kobezzza/Snakeski...0%BE%D0%B5-API, но в видео про это ни слова. Ты в видео ставишь как модуль, а вотчера там нет!
На видео настраивается встроенная функция File Watcher самого WebStorm. Встроенные вотчеры WS работают с CLI интерфейсом, такая логика применяется ко всем другим модулям, будь то 6to5 или TypeScript.

Цитата:

nodejs модули подключаются относительно файла в котором require, а snakeskin.compileFile относительно корня сервера.
Можешь точно описать, что ты делаешь, что бы я проверил?

Gozar 04.02.2015 23:18

Цитата:

Сообщение от kobezzza
snakeskin ./tpls/ -o ./tpls

Так и не удалось запустить под линуксом, не находит программу, хотя я проверил она скачалась. 6to5 стоит рядом работает нормально. snakeskin непашет ни в консоли, ни вотчер.

kobezzza 04.02.2015 23:22

Цитата:

Сообщение от Gozar (Сообщение 355003)
Так и не удалось запустить под линуксом, не находит программу, хотя я проверил она скачалась. 6to5 стоит рядом работает нормально. snakeskin непашет ни в консоли, ни вотчер.

Ну не может быть так, у меня же в линухе/маке/вине всё работает, значит ты что-то делаешь не так, мб не так поставил, я хз, но я не могу понять что :) Я же не вредничаю, но я правда не понимаю.

kobezzza 04.02.2015 23:23

Цитата:

Сообщение от Gozar (Сообщение 355003)
Так и не удалось запустить под линуксом, не находит программу, хотя я проверил она скачалась. 6to5 стоит рядом работает нормально. snakeskin непашет ни в консоли, ни вотчер.

Ну не может быть так, у меня же в линухе/маке/вине всё работает, значит ты что-то делаешь не так, мб не так поставил, я хз, но я не могу понять что :) Я же не вредничаю, но я правда не понимаю.

Чтобы был доступен вызов вызов SS в консоли, то его нужно ставить глобально.

npm i -g snakeskin


Ты так ставил?

Gozar 04.02.2015 23:24

Цитата:

Сообщение от kobezzza
Ну не может быть так, у меня же в линухе/маке/вине всё работает, значит ты что-то делаешь не так, мб не так поставил, я хз, но я не могу понять что Я же не вредничаю, но я правда не понимаю.

Бывает!
Установка так:
npm install snakeskin --global


запуск так:
snakeskin -s ./file.ss -o ./path.ss.js


непашет. Файл не найден. Точка.

Gozar 04.02.2015 23:25

Цитата:

Сообщение от kobezzza
Чтобы был доступен вызов вызов SS в консоли, то его нужно ставить глобально.

Я как бы в курсе.
Цитата:

Сообщение от Gozar
6to5 стоит рядом работает нормально.


kobezzza 04.02.2015 23:27

Цитата:

непашет. Файл не найден. Точка.
Не найден файл шаблона? Или не найдена команда Snakeskin?

Gozar 04.02.2015 23:33

Цитата:

Сообщение от kobezzza
Не найден файл шаблона? Или не найдена команда Snakeskin?

snakeskin не найден. Я сначала думал, что он шаблон не находит, а потом проверил, команда не найдена.

Установка так:
npm install snakeskin --global

запуск так:
snakeskin -s ./file.ss -o ./path.ss.js

kobezzza 04.02.2015 23:36

Цитата:

Сообщение от Gozar (Сообщение 355015)
snakeskin не найден. Я сначала думал, что он шаблон не находит, а потом проверил, команда не найдена.

Установка так:
npm install snakeskin --global

запуск так:
snakeskin -s ./file.ss -o ./path.ss.js

Уфф, завтра устрою бреиншторм, у тебя Кубунта? Придётся ставить тестить, я тестю на голой Убунте, всё ок, буду тестировать...

Gozar 04.02.2015 23:40

Цитата:

Сообщение от kobezzza
Кубунта

Kubunta 13.10

kobezzza 04.02.2015 23:48

Цитата:

Сообщение от Gozar (Сообщение 355020)
Kubunta 13.10

Ок, завтра всё проверю ещё раз. По поводу относительных путей: была даже не бага, а не доработка, я её исправил и завтра выкачу релиз, спасибо за репорт.

UPD: локализовал багу, она связана с работой путей к файлам в Kubuntu в NPM, завтра исправлю, спасибо за репорт!

kobezzza 05.02.2015 00:33

Моя ошибка в том, что я наивно думал, что поведение в Убунте равно в Кубунте :)

melky 05.02.2015 01:33

Цитата:

Сообщение от kobezzza
UPD: локализовал багу, она связана с работой путей к файлам в Kubuntu в NPM, завтра исправлю, спасибо за репорт!

интересненько. а это как ? :)

kobezzza 05.02.2015 01:50

Цитата:

Сообщение от melky (Сообщение 355045)
интересненько. а это как ? :)

В package.json стоит

"bin": {
    "snakeskin": "bin/snakeskin.js"
}


А нужно исправить на

"bin": {
    "snakeskin": "./bin/snakeskin.js"
}


И все будет ок, я думаю это бага NPM

melky 05.02.2015 09:42

Цитата:

Сообщение от kobezzza (Сообщение 355048)
В package.json стоит

"bin": {
    "snakeskin": "bin/snakeskin.js"
}


А нужно исправить на

"bin": {
    "snakeskin": "./bin/snakeskin.js"
}


И все будет ок, я думаю это бага NPM

спасибо, запомню) вообще, в пакетах стоит точка - сейчас глянул на нескольких

Gozar 05.02.2015 09:59

Цитата:

Сообщение от kobezzza
А нужно исправить на

"bin": {
"snakeskin": "./bin/snakeskin.js"

Жду обновления на гите. Исправил у себя в конфиге, но ничего не изменилось, возможно нужно устанавливать заново. хз.

kobezzza 05.02.2015 11:35

Цитата:

Сообщение от Gozar (Сообщение 355079)
Жду обновления на гите. Исправил у себя в конфиге, но ничего не изменилось, возможно нужно устанавливать заново. хз.

Проблема оказалась не в этом, как я изначально подумал...:-E

Мне виндузятнику мир Линуха кажется не логичным, но в общем проблема в следующем: если ставить ноду через репозитарий, т.е.

sudo apt-get install nodejs


То PATH переменная будет nodejs, а не node, как например на винде, и из-за Sha-Bang в файле CLI скрипта

#!/usr/bin/env node


Ругается и говорит ошибку, мол нет такого файла.

Решения я сейчас вижу 2: пользователь сам должен задать переменную Path node или изменить Sha-Bang, но я внимательно проглядел как сделано в других CLI утилитах и там обращение идёт именно к node.

На эту тему были исьюшки

https://github.com/joyent/node/issues/3911

Интересно, что Убунте, на которой я тестил стоял путь node, поэтому у меня всё работало, а на голой Кубунте у меня не заработал ни один CLI пока я не установил сам PATH переменную.

Линуксоиды, подскажите мне нубу, что в такой ситуации делать?

Я склоняюсь просто написать Sha-Bang

#!/usr/bin/env nodejs


Но мне смущает, почему никто так не делает, а рекомендуют юзерам задать Path самостоятельно Оо

kobezzza 05.02.2015 12:19

Фух, в общем тщательно покурив СтекОверфлоу я решил оставить PATH как есть, а у тех, у кого проблема делать:

ls -s /usr/bin/nodejs /usr/bin/node


Хз почему так лучше, но все так рекомендуют.

После этой операции snakeskin стал доступен как PATH переменная в консоли.

Полный листинг команд:

sudo apt-get install nodejs
ls -s /usr/bin/nodejs /usr/bin/node
sudo apt-get install npm
sudo npm install -g snakeskin


Также выкатил релиз с исправлением относительных путей в compileFile.

Zend 05.02.2015 12:23

Цитата:

Сообщение от kobezzza
PATH

С этими какая то беда у всех. Половина модулей обещающих CLI не работают. Приходится потом с бубном танцевать. Я много где встречал такие затыки.

kobezzza 05.02.2015 12:26

Цитата:

Сообщение от Zend (Сообщение 355121)
С этими какая то беда у всех. Половина модулей обещающих CLI не работают. Приходится потом с бубном танцевать. Я много где встречал такие затыки.

Угу, как я понял, что это произошло из-за того, что изначально модуль назывался node и npm и прочие модули до сих пор работают именно с таким именем, а потом в Линухах (в Винде и Маке всё осталось по старому) решили, что node название слишком абстрактное и переименовали в nodejs и тут всё понеслось...

Gozar 05.02.2015 12:44

Цитата:

Сообщение от kobezzza
node название слишком абстрактное и переименовали в nodejs

Оно не абстрактное, "оно" программа Amateur Packet Radio Node program.

Gozar 05.02.2015 12:47

kobezzza,
Я пишу в консоли node и получаю CLI интерфейс node, можно сделать console.log(10); и выведет 10.

Gozar 05.02.2015 12:51

Ну и да у меня node это линк /etc/alternatives/node который линк /usr/bin/nodejs

Проблема осталась. 6to5 работает без бубна.

kobezzza 05.02.2015 12:58

Цитата:

Сообщение от Gozar (Сообщение 355132)
Ну и да у меня node это линк /etc/alternatives/node который линк /usr/bin/nodejs

Проблема осталась. 6to5 работает без бубна.

Ну поэтому и осталась, т.к. нужен именно /usr/bin/node. У меня вот без этого и 6to5 не завёлся, но почему он работает у тебя я уже даже хз, т.к. ошибка 100% тут не в самой либе или CLI, а именно в том, как NPM её ставит глобально, а настройки у меня такие же как и у них. Изучая данный вопрос я нашёл почти во всех популярных CLI либах (grunt-cli, gulp и т.д.) вопросы на Гитхабе по данной теме, т.е. проблема реально часто возникает у пользователей Линуха и везде ответ, мол сделайте линк на /usr/bin/node.

***

Собственно тут несколько решений:

1) Можно натравить ноду ручками на CLI

Например,

cd myProject
npm install snakeskin
node ./node_modules/snakeskin/bin/snakeskin.js параметры


2) Можно использовать средства сборки grunt или gulp, а для вотчинга использовать grunt-watch и gulp-watch (на мой взгляд это вообще самое правильное решение)

3) Можно таки указать линк на /usr/bin/node

4) Можно открыть ./bin/snakeskin.js и подредактировать Sha-Bang, вставив nodejs вместо node.

5) Можно использовать NodeJS API.

***

Эту проблему и пути решения я опишу в FAQ.

Gozar 05.02.2015 13:02

2 не устраивает.
3. Шутишь? У меня стоит пакет 6to5 в соседней папке и с ним все ок Sha-Bang у него node
4 не работает.

Gozar 05.02.2015 13:03

Цитата:

Сообщение от kobezzza
Эту проблему и пути решения я опишу в FAQ.

угу, а еще лучше реши проблему.

Gozar 05.02.2015 13:11

6to5 package.json
{
  "name": "6to5",
  "description": "Turn ES6 code into readable vanilla ES5 with source maps",
  "version": "2.12.6",
  "author": {
    "name": "Sebastian McKenzie",
    "email": "sebmck@gmail.com"
  },
  "homepage": "https://6to5.org/",
  "repository": {
    "type": "git",
    "url": "git://github.com/6to5/6to5"
  },
  "preferGlobal": true,
  "main": "lib/6to5/index.js",
  "bin": {
    "6to5": "./bin/6to5/index.js",
    "6to5-node": "./bin/6to5-node",
    "6to5-runtime": "./bin/6to5-runtime"
  },
  "browser": {
    "./lib/6to5/index.js": "./lib/6to5/browser.js",
    "./lib/6to5/register.js": "./lib/6to5/register-browser.js"
  },
  "keywords": [
    "harmony",
    "classes",
    "modules",
    "let",
    "const",
    "var",
    "es6",
    "transpile",
    "transpiler",
    "6to5"
  ],
  "scripts": {
    "bench": "make bench",
    "test": "make test"
  },
  "dependencies": {
    "acorn-6to5": "0.11.1-16",
    "ast-types": "~0.6.1",
    "chokidar": "0.11.1",
    "commander": "2.5.0",
    "core-js": "0.4.4",
    "estraverse": "1.8.0",
    "esutils": "1.1.6",
    "esvalid": "1.1.0",
    "fs-readdir-recursive": "0.1.0",
    "jshint": "2.5.10",
    "lodash": "2.4.1",
    "output-file-sync": "^1.1.0",
    "private": "0.1.6",
    "regenerator": "0.8.3",
    "regexpu": "0.3.0",
    "roadrunner": "1.0.4",
    "source-map": "0.1.40",
    "source-map-support": "0.2.8",
    "kexec": "0.2.0"
  },
  "devDependencies": {
    "browserify": "6.3.2",
    "chai": "1.9.2",
    "istanbul": "0.3.2",
    "jshint-stylish": "1.0.0",
    "matcha": "0.6.0",
    "mocha": "1.21.4",
    "rimraf": "2.2.8",
    "uglify-js": "2.4.15"
  },
  "optionalDependencies": {
    "kexec": "0.2.0"
  },
  "readme": "<p>blabla</p>\n",
  "readmeFilename": "README.md",
  "bugs": {
    "url": "https://github.com/6to5/6to5/issues"
  },
  "_id": "6to5@2.12.6",
  "dist": {
    "shasum": "30294d1698e3690b68360fe19a04f0576f855b96"
  },
  "_from": "6to5@",
  "_resolved": "https://registry.npmjs.org/6to5/-/6to5-2.12.6.tgz"
}

kobezzza 05.02.2015 13:14

Цитата:

4 не работает.
Ну, тут пакет нужно переустановить вручную:

cd documents
git clone https://github.com/kobezzza/Snakeskin
cd Snakeskin


В bin/snakeskin.js меняешь на node.js и после в папке Snakeskin делаешь

npm i -g


После этого всё должно заработать.

Цитата:

Шутишь? У меня стоит пакет 6to5 в соседней папке и с ним все ок Sha-Bang у него node
Я не понимаю почему и в чём проблема, бьюсь над этим уже 4 часа, НО у меня 6to5 тоже не работает :)

Цитата:

угу, а еще лучше реши проблему.
Если найду решение, то обязательно.

UPD: эврика, только сейчас обратил внимание на "preferGlobal": true, похоже именно этот параметр форсирует обязательное добавление в PATH в лине, сейчас попробую заюзать его :)

Gozar 05.02.2015 13:25

Цитата:

Сообщение от kobezzza
После этого всё должно заработать.

и ничего не изменилось.

Gozar 05.02.2015 13:26

Цитата:

Сообщение от kobezzza
UPD: эврика, только сейчас обратил внимание на "preferGlobal": true, похоже именно этот параметр форсирует обязательное добавление в PATH в лине, сейчас попробую заюзать его

5 раз пробовал. Залей на git а то пересборка не помогает. Удалю и попробую поставить заново, может подхватит.

melky 05.02.2015 13:28

Цитата:

Сообщение от kobezzza (Сообщение 355119)
Фух, в общем тщательно покурив СтекОверфлоу я решил оставить PATH как есть, а у тех, у кого проблема делать:

ls -s /usr/bin/nodejs /usr/bin/node


Хз почему так лучше, но все так рекомендуют.

После этой операции snakeskin стал доступен как PATH переменная в консоли.

Полный листинг команд:

sudo apt-get install nodejs
ls -s /usr/bin/nodejs /usr/bin/node
sudo apt-get install npm
sudo npm install -g snakeskin


Также выкатил релиз с исправлением относительных путей в compileFile.

Код:

sudo apt-get install nodejs-legacy
тогда будет нужный бинарник (node)

для управления версиями node (обновление и т.д) ставится либо nvm либо n

вы меня заинтересовали! тоже подключусь к решению)

Gozar 05.02.2015 13:35

Кстати хотел спросить почему ф-ия собирает html через инкремент:
__RESULT__ +=


а не через массив с join:
__RESULT__.push();
__RESULT__.join('');

?

У себя инкремент на строки я видел года 3 назад, вот и интересно стало.

kobezzza 05.02.2015 13:35

Цитата:

sudo apt-get install nodejs-legacy
После этого у меня завёлся 6to5, отлично, значит проблему неверного биндинга можно отбросить, осталась проблема неверной установки глобального модуля.

Сейчас пересоберу пакет с preferGlobals, прям чувствую, что собака там зарыта.

kobezzza 05.02.2015 13:37

Цитата:

Кстати хотел спросить почему ф-ия собирает html через инкремент:
Потому что инкремент во всех современных VM работает значительно быстрее, НО SS умеет и через StringBuffer работать (по умолчанию используется массив).

https://github.com/kobezzza/Snakeski...ile#rendermode

melky 05.02.2015 13:38

Цитата:

Сообщение от kobezzza (Сообщение 355152)
После этого у меня завёлся 6to5, отлично, значит проблему неверного биндинга можно отбросить, осталась проблема неверной установки глобального модуля.

Сейчас пересоберу пакет с preferGlobals, прям чувствую, что собака там зарыта.

kobezzza, вряд ли https://docs.npmjs.com/files/package.json#preferglobal. я так понял, это только сообщение будет выводиться

сейчас так:
Код:

root@4ce0735a160c:/# npm i -g snakeskin
/root/.nvm/v0.11.16/bin/snakeskin -> /root/.nvm/v0.11.16/lib/node_modules/snakeskin/bin/snakeskin.js
snakeskin@6.5.24 /root/.nvm/v0.11.16/lib/node_modules/snakeskin
├── commander@2.6.0
├── js-beautify@1.5.4 (nopt@3.0.1, mkdirp@0.5.0, config-chain@1.1.8)
├── glob@4.3.5 (inherits@2.0.1, inflight@1.0.4, once@1.3.1, minimatch@2.0.1)
└── monocle@1.1.51 (readdirp@0.2.5)
root@4ce0735a160c:/# snakeskin
: No such file or directory
root@4ce0735a160c:/# grep version ~/.nvm/v0.11.16/lib/node_modules/snakeskin/package.json
  "version": "6.5.24",


melky 05.02.2015 13:43

А вот так работает:
Код:

root@4ce0735a160c:/# export SS=/root/.nvm/v0.11.16/lib/node_modules/snakeskin/bin/snakeskin.js
root@4ce0735a160c:/# node $SS --help

  Usage: snakeskin [options] [dir|file ...]

  Options:

    -h, --help              output usage information
    -V, --version            output the version number
    -p, --params [src]      path to the options file or options object
    -s, --source [src]      path to the template file or directory
    -f, --file [src]        path to the template file (meta-information)
    -m, --mask [mask]        mask for a template files (RegExp)
    -w, --watch              watch files for changes and automatically re-render
    -o, --output [src]      path to the file to save
    --extname [ext]          file extension for saving (if "output" is a directory)
    --exports [type]        export type
    -e, --exec              execute compiled template
    -d, --data [src]        path to the data file or data object
    -t, --tpl [name]        name of the main template
    --disable-localization  disable support for localization
    --i18n-fn [name]        i18n function name
    --language [src]        path to the localization file or localization object
    --words [src]            path to the localization file to save
    --disable-use-strict    disable 'use strict'; mode
    --bem-filter [name]      bem filter name
    --line-separator [char]  newline character (eol)
    --tolerate-whitespace    tolerate whitespace characters in the template
    --ignore                regular expression to ignore the empty space
    --auto-replace          enable macros support
    --macros [src]          path to the macros file or JS macros object
    --doctype [type]        xml doctype ("html" or "xml")
    --inline-iterators      inline forEach and forIn
    --disable-escape-output  disable default "html" filter
    --disable-replace-undef  disable default "undef" filter
    --render-as [mode]      render all templates as "interface" or "placeholder"
    --render-mode [mode]    render all templates in "stringConcat", "stringBuffer" or "dom"
    --pretty-print          formatting output

root@4ce0735a160c:/#


kobezzza 05.02.2015 13:48

Пересобрал релиз, залил в NPM

melky 05.02.2015 13:51

Цитата:

Сообщение от kobezzza (Сообщение 355158)
Пересобрал релиз, залил в NPM

Код:

root@4ce0735a160c:/# npm i -g snakeskin
/root/.nvm/v0.11.16/bin/snakeskin -> /root/.nvm/v0.11.16/lib/node_modules/snakeskin/bin/snakeskin.js
snakeskin@6.5.25 /root/.nvm/v0.11.16/lib/node_modules/snakeskin
├── commander@2.6.0
├── glob@4.3.5 (inherits@2.0.1, once@1.3.1, inflight@1.0.4, minimatch@2.0.1)
├── js-beautify@1.5.4 (nopt@3.0.1, config-chain@1.1.8, mkdirp@0.5.0)
└── monocle@1.1.51 (readdirp@0.2.5)
root@4ce0735a160c:/# snakeskin --help
: No such file or directory

что за хрень... сама нода нормально определяется
Код:

root@4ce0735a160c:/# /usr/bin/env node --version
v0.11.16



Часовой пояс GMT +3, время: 09:23.