Совместное использование модулей между NodeJS и AngularJS
Gist: https://gist.github.com/sevcsik/9207267
Они говорят, что одно из преимуществ в NodeJs в том, что вы работаете с один языком как в бэкэнде, так и во фронтэнде, поэтому проще использовать один и тот же код между ними. В теории звучит классно, но на практике синхронная обработка зависимостей в Node.js работает совершенно не так, как в любом клиентском фреймворке (они асинхронны).
Обычно это означает, что вы заканчиваете копи-пастом вашего кода между NodeJS и клиентской частью приложения или вы используете великолепные инструменты типа Browserify, но они добавляют дополнительный шаг в процессе сборки и вероятно будут конфликтовать с обработкой зависимостей в выбранном вами фреймворке (как AnularJS DI). Мне было бы стыдно называть это общим кодом (code sharing).
К счастью, с парой строчек шаблонного кода вы можете написать модуль, который работает как в NodeJS, так и в AngularJS без каких-либо изменений.
|
|
Вот и все. Без глобальных переменных во фронтэнде и с работающими зависимостями. Переменные isNode
и isAngular
находятся в замыкании, поэтому они могут быть использованы для переключения между платформо-зависимыми блоками кода (такими как angular.extend и node.extend). Так как вам понадобятся ветви isAngular
и isNode
в любом случае, то нам потребуется сделать функцию-обертку на фронт-энде. Всего 4 дополнительных строчки кода требуются, чтобы сделать ваш модуль совместимым с клиентом и с сервером.
Портирование в RequireJS будет аналогичным, так как он в том числе использует функции-обертки и зависимости как аргументы функции.
Читайте так же статьи по теме: