Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   модульность для js (https://javascript.ru/forum/project/28264-modulnost-dlya-js.html)

Madzi 03.10.2013 08:54

Цитата:

Сообщение от vflash (Сообщение 274824)
как указать что этот файл зависит от других модулей но при этом не изменяя его ?

YUI.add('module-name', function (Y) {
// ... текст модуля ...
}, 'version', {
    lang: ['ru'], // для каких языков есть языковые файлы
    requires: [
        'some-module',... // модули от которых зависит данный модуль.
   ]
    skinnable: true // присутствует CSS
});

Зависимость модулей может быть иерархическая.
Т.е.
например:
* dom
* base
* core
* strings
В модуле dom указываются только base и strings, а в base - core.

vflash 03.10.2013 09:28

Цитата:

Сообщение от Madzi (Сообщение 274838)
YUI.add('module-name', function (Y) {
// ... текст модуля ...
}, 'version', {
    lang: ['ru'], // для каких языков есть языковые файлы
    requires: [
        'some-module',... // модули от которых зависит данный модуль.
   ]
    skinnable: true // присутствует CSS
});

Зависимость модулей может быть иерархическая.
Т.е.
например:
* dom
* base
* core
* strings
В модуле dom указываются только base и strings, а в base - core.

это по вашему "не изменяя файл" . как думаете что будет если я такой код function XX() {...}; обверну в модуль ? Правильно мы из глобальной функции XX получим локальную сломав всю логику.

Madzi 03.10.2013 09:29

Глобальные функции - зло. Не стоит их использовать в коде.

vflash 03.10.2013 09:49

Цитата:

Сообщение от Madzi
Глобальные функции - зло. Не стоит их использовать в коде.

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

Madzi 03.10.2013 10:47

Цитата:

Сообщение от vflash (Сообщение 274847)
речь не о хорошо или плохо. вы ведь сами пишите что можно делать из файла модуль не изменяя его, и тут же приводите пример в котором его изменяет.

Можно вообще без изменений:
YUI({
groups: {
  'old-scripts': {
    'old-script': {
      base: 'http://...', // Путь к скриптам
      async: false,
      modules: {
        'old-script': {
          path: 'old-script.js', // путь к файлу (относительно указанного выше)
          requires: ['another-old-script'] // файлы от которых зависит данный
        },
        'another-old-script': { // также сюда можно включать CSS файлы
        ...
        }
      }
    }
  }
}
}).use('old-script', function (Y) {
//... Песочница, в которой доступен "старый" код
});

vflash 03.10.2013 14:42

Цитата:

Сообщение от Madzi
Можно вообще без изменений:

допустим что умеет. Но как по вашему то что вы привели как пример это нормальный код ?

Madzi 03.10.2013 15:35

Цитата:

Сообщение от vflash (Сообщение 274903)
допустим что умеет. Но как по вашему то что вы привели как пример это нормальный код ?

С учётом того, что это прописывается один раз в конфигурационном файле, а потом используется во всех модулях - да.

Но по возможности, конечно, стараюсь избавляться от Legacy кода, так как глобальные переменные/функции - зло, которое неизвестно когда проявит себя.

tenshi 03.10.2013 22:18

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

tenshi 03.10.2013 22:27

как ты отлаживаешь свои сендбоксы? это же нечитаемая портянка. Сравни например с http://wrikeman.hyoo.ru/wman/-mix/in...b.stage=dev.js и http://wrikeman.hyoo.ru/wman/-mix/index.stage=dev.css

tenshi 03.10.2013 22:29

> function(global,module,core,elems,tmpl,__zAgS_)

global и module ещё понятно, но нафига остальные-то навязывать?

tenshi 03.10.2013 22:32

Цитата:

Зависимость модулей может быть иерархическая.
Т.е.
например:
* dom
* base
* core
* strings
В модуле dom указываются только base и strings, а в base - core.
Я не хочу обо всё этом думать.

Цитата:

Сообщение от Madzi (Сообщение 274838)
YUI.add('module-name', function (Y) {
// ... текст модуля ...
}, 'version', {
    lang: ['ru'], // для каких языков есть языковые файлы
    requires: [
        'some-module',... // модули от которых зависит данный модуль.
   ]
    skinnable: true // присутствует CSS
});

И не хочу столько всего копипастить.

Madzi 03.10.2013 22:43

tensh, никто вас и не заставляет делать всё это.

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

Пока приложение маленькое - реально удержать всё в голове/бумаге/файле. Помнить где какие глобальные переменные и функции и т.п. В какой-то критический момент времени приходится разделять код. Держать код небольшими порциями в отдельных файлах это огромный плюс. Тем более, что можно его тестировать этими частями.

И я реально не представляю, каким образом можно писать большой проект (RIA приложение 500+ скриптов) не пользуясь подобными подходами.

tenshi 03.10.2013 23:24

У меня всё автоматизировано, чего тут ещё думать?)

http://hyoo.ru/?article=%D0%9C%D0%BE...author=Nin+Jin

Madzi 03.10.2013 23:47

У меня тоже всё автоматизировано :)
Плюс не тянется лишний код. Например, для Оперы не подтянутся патчи IE и наоборот. Плюс ленивая загрузка, когда скрипт загрузится только если пользователь будет использовать нужный функционал.
Мне не нужно следить за jam файлами. И один раз написанный модуль я могу использовать в бесконечном числе проектов.

Интересно, а как тестировать ваши модули ? Как в них мокать объекты ?

vflash 03.10.2013 23:56

Цитата:

Сообщение от tenshi
> function(global,module,core,elems,tmpl,__zAgS_)

global и module ещё понятно, но нафига остальные-то навязывать?

этот файл часть модуля http://zzreader.com/src/cmps/cmps.cram_notify.json
сам модуль зависим от трех модулей [ core, elems, tmpl ] ,
если бы не было зависимостей то определенны были бы только две переменных global и module
__zAgS_ - это часть внутренней кухни, она не в счет.

tenshi 04.10.2013 00:17

Не всё, раз приходится столько писать руками.

А в чем проблема замочить глобальные переменные?

$jin.method( function $jin_alertRandom( ){
    alert( Math.random() )
} )

$jin.test( function( test ){
    test.timeout( 1 )
    
    test.mockMethod( function Math_random( ){
        return 0.25
    } )
    test.mockMethod( function alert( value ){
        test.equal( value, 0.25 ).done()
    } )
    
    $jin.alertRandom()
})

tenshi 04.10.2013 00:19

Цитата:

Сообщение от vflash (Сообщение 275009)
этот файл часть модуля http://zzreader.com/src/cmps/cmps.cram_notify.json
сам модуль зависим от трех модулей [ core, elems, tmpl ] ,
если бы не было зависимостей то определенны были бы только две переменных global и module
__zAgS_ - это часть внутренней кухни, она не в счет.

Ах да, у тебя ж зависимости хрен знает где) Тогда снимаю претензию


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