Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   grunt-es6-transpiler (https://javascript.ru/forum/offtopic/46946-grunt-es6-transpiler.html)

Gozar 30.04.2014 21:49

grunt-es6-transpiler
 
Уже мозг сломал. Как настроить грунт, чтобы он увидел es6-transpiler?

~/grunt-es6/

Конфиги:

package.json
{
  "name": "es6",
  "version": "0.0.1",
  "devDependencies": {
    "grunt": "~0.4.4",
    "grunt-es6-transpiler": "0.1.0"
  }
}


Gruntfile.js
module.exports = function(grunt) {

    grunt.initConfig({
      "es6transpiler": {
        dist: {
            files: { 'js/es6/test.js': '/js/es5/test.es5.js' }
        }
      }
    })

    grunt.loadNpmTasks('grunt-es6-transpiler');

    grunt.registerTask('default',['es6transpiler']);

};


Выдает ошибку:
Local Npm module "grunt-es6-transpiler" not found. Is it installed?

куда я только не ставил grunt-es6-transpiler и в ~/ и в ~/grunt-es6/ и в домашнюю директорию и в корень проекта, результат один: Local Npm module "grunt-es6-transpiler" not found. Is it installed?

В чем может быть проблема?

nerv_ 30.04.2014 21:53

npm install

?

kobezzza 30.04.2014 21:54

Другие таски работают? Вообще таски обычно в node_modules хранят вместе с остальными модулями ноды.

Кстати, если юзаешь вебшторм, то удобней, имхо, настроить FileWatcher - я так и делаю.

nerv_ 30.04.2014 22:02

еще можно обратить внимание на эту строчку
Цитата:

files: { 'js/es6/test.js': '/js/es5/test.es5.js' }


Gozar 30.04.2014 22:21

Цитата:

Сообщение от kobezzza
то удобней, имхо, настроить FileWatcher - я так и делаю.

скрин Watchera можешь скинуть, а то, если настройка такая же как в stylus + nib , то это так очевидно, что я никогда не настрою :(

Gozar 30.04.2014 22:34

XZ почему, но оно заработало ...

Gozar 30.04.2014 22:41

Забавно как оно

let b = 10;


превращает в

var b$0 = 10;


:)

kobezzza 01.05.2014 09:39

https://sasulca426b.mail.yandex.net/...rce_default=no

Gozar 01.05.2014 10:09

kobezzza,
Спасибо, а в es6-transpiler.cmd что? Ссылка на es6toes5?

kobezzza 01.05.2014 10:14

Это инструкция для командной оболочки, они уже есть в npm-модуле, только .cmd - это для винды, для линя и мак там рядышком лежит простой файл без расширения.

На моём примере транслятор установлен глобально (npm i -g) и путь проложен к глобальной папке модулей, но вообще это без разницы. Если будешь настраивать локальный модуль, то смотри папочку .bin в node_modules.

Gozar 01.05.2014 10:39

Я правильно понимаю, что запустить es6 код без компиляции его в es5 в браузере нельзя?

А то, что-то меня смутила строчка:
Цитата:

no runtime library (only polyfills if needed)
Настроить Вотчер у меня не получилось пока, буду пробовать через Grunt пока :( он собирает нормально.

kobezzza 01.05.2014 10:45

Цитата:

Я правильно понимаю, что запустить es6 код без компиляции его в es5 в браузере нельзя?
Можно, через URL.createObjectURL ну и eval для древних браузеров если надо, но лучше так не делать, ибо трансляция - это не дешёвая операция.

Цитата:

no runtime library (only polyfills if needed)
Имеется ввиду, что код после трансляции не требует никаких дополнительных библиотек для работы, а вот например Traceur (который кстати интегрирован из коробки в WebStorm) дополнительно подключает свои библиотеки.

Gozar 01.05.2014 11:04

Спасибо за консультацию, теперь стало все понятно.

monolithed 01.05.2014 17:05

Цитата:

Сообщение от kobezzza
https://sasulca426b.mail.yandex.net/...rce_default=no

Несуществующая страница

Gozar 01.05.2014 17:42

Цитата:

Сообщение от monolithed
Несуществующая страница

норм страница

dmitry111 01.05.2014 18:05

а зачем он нужен этот es6 ?

Мне для написания es5 за глаза, да и то есть ненужные опции (вроде создания свойств с writable, enumerable, configurable - зачем это? только путаницу создает)

Вроде как существуют правила написания кода (пусть даже негласные), которые со временем стараешься соблюдать (например переменные объявлять вначале скрипта). И тут на тебе, выходит новые es.. И уже переменные можно ставить где попало. Зачем?

извините за оффтоп )

kobezzza 01.05.2014 18:10

Затем что это очень удобно, одни arrow function чего стоят.

Лично у меня самые любимые и часто юзаемые штуки:
1) arrow function
2) строки-шаблоны
3) let переменные
4) rest параметры функций
5) spread-ы

Назад к ecma5 уже никак не хочу)

Цитата:

(вроде создания свойств с writable, enumerable, configurable - зачем это? только путаницу создает)
enumerable оч удобная штука. А вообще задачи бывают разные и нужно больше инструментов и возможность, лично я был оч хотел иметь возможность явно декларировать хеш функцию для коллекций, как это делается во многих других языках.

Octane 01.05.2014 18:28

Цитата:

Сообщение от kobezzza
Назад к ecma5 уже никак не хочу)

Еще такая штука очень нравится (наверное destruction assignment для параметров функции называется):
function func({param1: defValue, param2}) {
    …
}

func({param2: value});

Transpiler поддерживает? Когда с Traceur игрался, там работало.

kobezzza 01.05.2014 19:10

Цитата:

Transpiler поддерживает?
Да

Дзен-трансгуманист 01.05.2014 19:48

Цитата:

Сообщение от dmitry111
ненужные опции (вроде создания свойств с writable, enumerable, configurable - зачем это? только путаницу создает)

Ну здрасьте, ненужные.
enumerable - попадет или нет в for..in и Object.keys
configurable - можно ли удалять ключ или переопределять дескриптор
writable - будет ли константой

Да и аксессоры так назначать удобнее, ибо единый интерфейс для всех типов свойств.

Gozar 01.05.2014 20:52

Цитата:

Сообщение от dmitry111
а зачем он нужен этот es6 ?

По твоему нужно всю жизнь мучиться с for in и не использовать for of потому что тебе лень?
Не использовать let, который добавляет удобство и гибкость?

Любой язык либо развивается под современные нужды, либо его забывают, как VBScript (http://msdn.microsoft.com/ru-ru/libr...=vs.85%29.aspx)

es5 не тот язык на котором я хочу писать большие приложения. Неудобно.

Gozar 01.05.2014 21:05

Например, чтобы забыть это хак(считаю это хаком):
function f(x, y, z) { }
var args = [0, 1, 2];
f.apply(null, args);


With ES6 spread you can now write the above as:

function f(x, y, z) { }
var args = [0, 1, 2];
f(...args);



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

Пусть сейчас лапша будет на выходе, но я хочу писать на новом языке, а не на устаревшей недоделке, состоящей чуть более чем полностью из костылей.

Не понимаешь зачем надо, посмотри на Python, на CoffeScript, может дойдет.

monolithed 01.05.2014 23:15

Цитата:

Сообщение от dmitry111
И уже переменные можно ставить где попало. Зачем?

И сейчас можно.

Попробую угадать что ты имел ввиду:

Зачем вообще объявлять все переменные в самом начале функции если они могут быть невостребованными?

Помню в ANCI C 89/90 можно было объявлять переменные только в начале функции, но потом одумались и отменили это обязательное поведение.

Однако если ты блочную область видимости, то {let ...} это от части "костыль".
Не в том смысле что сейчас можно писать (считаю очень круто, что нашли компромисс в этом вопросе, т.к. долго не хотели принимать эту запись):

for (let foo of object) ...


А это:

if (false) {
   var foo = 1;
}

alert(foo);

Переменная foo хоть и имеет значение undefined, но как-никак, она определена и let в этом плане спасательный "костыль"!

А вообще, мне кажется, что ты мало пишешь на JS раз не понимаешь зачем ES6

dmitry111 02.05.2014 12:42

Цитата:

Сообщение от monolithed
А вообще, мне кажется, что ты мало пишешь на JS раз не понимаешь зачем ES6

да не, не мало))

Речь о другом.

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

Мне не хотелось бы, что js превращался в новый php, где обновления происходят довольно часто. php - это сервер, какую версию установил, с такой и работаешь! JS - это браузеры и как следствие несовместимости!

Не хотелось бы видеть сначала es6, потом es7, потом es8 и тд..

Это не просто создает путаницу, но мешает формированию code style, да и в целом сказывается негативно на профессиональных качествах программистов

ИМХО)

Gozar 02.05.2014 13:15

Цитата:

Сообщение от dmitry111
Не хотелось бы видеть сначала es6, потом es7, потом es8 и тд..

не смотри, не увидишь, потому что так скорее всего и будет.

Цитата:

Сообщение от dmitry111
неужели трудно сесть и написать идеальный стандарт

Я вот все думаю, кого черта? Неужели трудно в Хроме сразу сделать поддержку давления пером при использовании планшета, как в ФФ? Могли бы сразу сделать, а нифига ... Мысль надеюсь понятна?

kobezzza 02.05.2014 13:16

Цитата:

Но неужели трудно сесть и написать идеальный стандарт
К сожалению трудно, особенно если развитие идёт эволюционным путём.

Цитата:

Не хотелось бы видеть сначала es6, потом es7, потом es8 и тд..
А мне бы хотелось, т.к. оч долгое время язык в принципе не развивался и нужно догонять. ES6 не вводит чего то принципиально нового, а просто добавляет то, чего языку явно не хватало и вынуждало разработчиков писать свои велосипеды.

К тому же новые версии стандарта - это не только новый синтаксис, а также улучшение стандартной библиотеки, которая сейчас в JS практически отсутствует.

Цитата:

Это не просто создает путаницу, но мешает формированию code style, да и в целом сказывается негативно на профессиональных качествах программистов
Т.е. ты хочешь один раз выучить что-то и не развиваться дальше? Моё мнение: если программист перестаёт изучать новые языки, подходы и т.д. то перестаёт быть таковым.

dmitry111 02.05.2014 13:40

а где es6 изучать? Где он наиболее полно изложен?

тут все что нужно есть:
http://kangax.github.io/es5-compat-table/es6/
?

kobezzza 02.05.2014 13:53

Цитата:

тут все что нужно есть:
http://kangax.github.io/es5-compat-table/es6/
?
да

monolithed 02.05.2014 14:24

Цитата:

Сообщение от dmitry111
Я не спорю, возможно обновления нужны! Но неужели трудно сесть и написать идеальный стандарт, а не следующую версию

Почему люди сразу не рождаются взрослыми?
Цитата:

Сообщение от dmitry111
Мне не хотелось бы, что js превращался в новый php, где обновления происходят довольно часто

Пока обратная совместимость не нарушается итерационный цикл не важен.

Цитата:

Сообщение от dmitry111
Не хотелось бы видеть сначала es6, потом es7, потом es8 и тд..

Это не просто создает путаницу, но мешает формированию code style, да и в целом сказывается негативно на профессиональных качествах программистов

Напомни сколько тебе лет? :)

dmitry111 02.05.2014 17:09

Цитата:

Сообщение от monolithed (Сообщение 310087)
Почему люди сразу не рождаются взрослыми?

Напомни сколько тебе лет? :)

сколько раз обновлялся Си с 72 года?

На самом деле в es6 не появится чего-то нового, появится то, что есть уже в других языках. Думаю производительность тоже не изменится

Проблема c js в том, что все обновления нужно внедрить везде где есть js. А так как те, кто пишет стандарты тоже люди и могут где-то что-то упустить из виду могут появляться разнообразные баги, так как все что не описано в стандарте будет реализовываться как этого захочет компания-разработчик. И будет в хроме одно, в ff другое.

Думаю es6 возник под давлением конкурентов (дарт, тайпскрипт или как их там).
Ну чтож будем изучать es6, хотя меня es5 всем устраивал!

kobezzza 02.05.2014 17:35

Цитата:

сколько раз обновлялся Си с 72 года?
Ну последний стандарт С был принят в 2011 году.
Для С++ сейчас внедряется стандарт С++ 14. Около месяца назад вышла Java 8 вводящая оч много изменений и уже полным ходом идёт работа над Java 9. Также недавно вышел Python 3.4.

Цитата:

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

http://wiki.ecmascript.org/doku.php?...ony:generators
http://wiki.ecmascript.org/doku.php?...ny:binary_data
http://wiki.ecmascript.org/doku.php?..._maps_and_sets

Фактически JS уже окончательно из языка веб-сценариев перерождается в язык общего назначения, как например Java или Python.

Цитата:

Проблема c js в том, что все обновления нужно внедрить везде где есть js. А так как те, кто пишет стандарты тоже люди и могут где-то что-то упустить из виду могут появляться разнообразные баги, так как все что не описано в стандарте будет реализовываться как этого захочет компания-разработчик. И будет в хроме одно, в ff другое.
И поэтому язык не нужно развивать? В первую же неделю будет написана библиотека полифилов которая всё заставит работать как надо и всё.

monolithed 02.05.2014 17:42

Цитата:

Сообщение от dmitry111
колько раз обновлялся Си с 72 года?

Он долго не был стандартизирован, и лишь в 89 году вышел официальный стандарт, затем в 99 и 2011.

Я в последнее время мало слежу за развитем С, однако про С++ могу рассказать куда больше. В 11-м году вышел новый стандарт С++11, и уже спустя некоторое время появился черновик С++14, который должен исправить недостатки предыдущей редакции (как было с ES 5.1).
Следующий мажорный релиз должен состояться в 17-м году.

Ты наверное не поверишь, но уже сейчас все основные компиляторы поддерживают большую часть будущего стандарта.

http://clang.llvm.org/cxx_status.html
http://gcc.gnu.org/projects/cxx1y.html




kobezzza,
Сложно что-то доказывать тем кто не понимает сути вопроса :)

dmitry111 02.05.2014 17:59

kobezzza,

нет, я имел в виду только С! Он же вроде не менялся?

Вот кстати в случае с С и С++ - это действительно умное решение!
Один язык процедурный, другой объектно-ориентированный!
ИМХО, нужно было бы также сделать с js, потому что :

Цитата:

Сообщение от kobezzza
Фактически JS уже окончательно из языка веб-сценариев перерождается в язык общего назначения, как например Java или Python.

но на js пишут не только крупные проекты с бюджетом несколько млн $.
Большинство с помощью js калькуляторы делает и всплывающие менюшки. Не думаю что тут нужна вся мощь Java или Python.

kobezzza 02.05.2014 18:05

Цитата:

нет, я имел в виду только С! Он же вроде не менялся?
Цитата:

последний стандарт С был принят в 2011 году.
***

Цитата:

Один язык процедурный, другой объектно-ориентированный!
Ну во первых, для C есть фреймворки для ОО подхода, а во вторых C++ поддерживает все возможные стили программирования :)

Цитата:

Большинство с помощью js калькуляторы делает и всплывающие менюшки. Не думаю что тут нужна вся мощь Java или Python.
Тебя кто-то заставляет юзать новые фишки? Юзай старые если тебе так нравиться :)

***

Я уже больше года все свои проекты пишу на ES6 и возвращаться назад не планирую, а когда везде сделают нативную поддержку, то я просто выкину транслятор.

dmitry111 02.05.2014 18:06

Цитата:

Сообщение от dmitry111
нет, я имел в виду только С! Он же вроде не менялся?

по крайней мере книга Язык программирования Си (Керниган и Ритчи) имеет всего два издания.

dmitry111 02.05.2014 18:09

Цитата:

Сообщение от kobezzza
Тебя кто-то заставляет юзать новые фишки? Юзай старые если тебе так нравиться

а как же. Приходится изучать es6, иначе перестану понимать чужие скрипты :)

а мог бы освоить Си! ))

kobezzza 02.05.2014 18:09

Цитата:

по крайней мере книга Язык программирования Си (Керниган и Ритчи) имеет два издания.
И что ? Я вот изучал С по книжке описывающей именно С-11, ибо книг по С навалом.

kobezzza 02.05.2014 18:15

Цитата:

а мог бы освоить Си! ))
Ну, учитывая, что в ES6 добавили структуры, улучшили типизированные массивы (теперь можно делать также массивы структур), то считай, что ты заочно изучаешь C:) А ручное управление памятью ты можешь получить при написании с флагом 'use asm' :)

dmitry111 02.05.2014 18:22

Цитата:

Сообщение от kobezzza (Сообщение 310131)
Ну, учитывая, что в ES6 добавили структуры, улучшили типизированные массивы (теперь можно делать также массивы структур), то считай, что ты заочно изучаешь C:) А ручное управление памятью ты можешь получить при написании с флагом 'use asm' :)

вот только это и обнадеживает :)

Дзен-трансгуманист 02.05.2014 18:29

Цитата:

Сообщение от dmitry111
Думаю производительность тоже не изменится

Для примера возьми ручную реализацию Set или Map на es5 и сравни по скорости с нативными.
Объяснение простое: O(n) vs. O(log n)

Цитата:

Сообщение от dmitry111
в es6 не появится чего-то нового, появится то, что есть уже в других языках

Но сделать тот же WeakMap на es5 физически невозможно.

Цитата:

Сообщение от dmitry111
Цитата:

Сообщение от monolithed
что ты мало пишешь на JS

да не, не мало))

Цитата:

Сообщение от dmitry111
меня es5 всем устраивал!

Не столь важно, как много ты пишешь, сколь важно, какие задачи ты решаешь.

Конечно, если вся твоя работа - поюзать функционал готовых библиотек ради "калькуляторов и всплывающих менюшек", то тебе не то что es6, тебе и es5 нафиг не нужен.

А не хочешь отставать - крути педали. :)


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