Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FrontTalks #1: Михаил Давыдов – LMD

FrontTalks #1: Михаил Давыдов – LMD

Я устал от AMD, пристально изучал другие сборщики и загрузчики – все не то... и мне пришлось сделать сборщик модулей моей мечты. В докладе будет о том, какие варианты рассматривались и что получилось в итоге.

Avatar for FrontTalks Conference

FrontTalks Conference

February 16, 2013

More Decks by FrontTalks Conference

Other Decks in Programming

Transcript

  1. 4 Плоские модули и cat **/*.js > build.js • Это быстро

    и просто • Что плохого –  Собирается все без разбора –  Возможны конфликты имен переменных –  Результат плохо сжимается –  Нужно учитывать порядок
  2. 6 define(['jQuery', 'lodash'], function ($, _) { var myStuff =

    {}; return myStuff; }); RequireJS & AMD: Модули
  3. 9 define(function () { var myStuff = {}; return myStuff;

    }); Много церемоний с define() 1. Нужно писать обертку
  4. 10 define("dojo/_base/html", [ "./kernel", "../dom", "../dom-style", "../dom-attr", "../dom-prop", "../dom-class", "../dom-construct",

    "../dom-geometry" ], function (dojo, dom, style, attr, prop, cls, ctr, geom) { }); Много церемоний с define() 2. Куча зависимостей – ад http://clck.ru/4b7ew
  5. 12 define(function () { var myStuff = {}; return myStuff;

    }); Много церемоний с define() 3. Артефакты: Приходится табулировать
  6. 13 require('module'); // js? require('async!data', cb); // ? require(ComicSans); //

    font? require() - God Object 1. Возвращает что угодно, как угодно 2. Не понятен результат
  7. 14 И еще AMD • Приходится поддерживать AMD –  jQuery, underscore,

    backbone, … –  2 версии с AMD и без • Пытаются заразить Node.js –  node-requirejs –  в node и так есть модульная система http://clck.ru/4b7dE
  8. 17 Другие пути •  browserify –  CommonJS – хорошо – 

    слишком много от Node.js – плохо •  просто загрузчик –  headjs –  yepnopejs
  9. 18 Из моего опыта •  Сегодня все собирается. Даже dev

    •  Читаемость кода очень важна –  Нужно исключить неявные конструкции •  Сборок бывает много –  dev, production, dev-ru, test-en_US •  Нужен контроль результата сборки –  Проверка целостности –  Подробная информация о сборке
  10. 21 var $ = require('$'), myStuff = {}; module.exports =

    myStuff; Модули – CommonJS/Modules 1.0* http://clck.ru/4b7gO
  11. 23 { "extends": "index.json", "output": "../index-en.js" "modules": { "i18n": "locale/en.json"

    }, "depends": "*.lmd.json" } Операции над конфигами http://clck.ru/4b7j2 main.lmd.json хранит зависимости main.js
  12. 24 Конфиги в формате JSON •  Минус – нужно писать

    конфиг •  JSON можно легко реиспользовать •  Количество конфигов сократилось •  Меньше писать сборочных скриптов •  Легче понять результат сборки
  13. 28 Плагины по формату LMD •  require() делает одну работу

    •  Результат require() стал предсказуемым •  require.css('style', function () {}) •  require.async('module').then(function () {}) •  Код стало проще воспринимать
  14. ______ __ __ ! /\ ___\ /\ \ /\ \

    ! \ \ \____ \ \ \____ \ \ \ ! \ \_____\ \ \_____\ \ \_\ ! \/_____/ \/_____/ \/_/ ! ! http://clck.ru/4dU-0!
  15. 32 Профит LMD •  Максимум автоматизации –  Сборщик LMD – 

    Аналитика •  Максимум явного кода –  require.*() •  Минимум писанины –  CommonJS –  CLI & GUI •  Минимум копипаста –  Операции над кофигами https://github.com/azproduction/lmd