Обмен кодом между AngularJS и Nodejs
Каков наилучший способ совместного использования кода между интерфейсом и бэкэнд с помощью javascript
, в частности, между nodejs
и angularjs
?
Дело в том, что мы используем те же enums
и constant values
, что и error codes
как в бэкэнд, так и в интерфейсе. Сейчас мы просто копируем и вставляем каждое изменение на обе платформы, что не является хорошим решением. Существуют также некоторые сервисы, которые можно использовать.
Я видел такие библиотеки, как browserify
; но это не совсем то, что я ищу. Я ищу решение, подобное maven dependency
в java
. В java
библиотеки можно легко использовать с помощью maven
, тогда как я не могу найти аналогичный способ сделать это в javascript
.
Есть ли способ изолировать эти службы и дать им как зависимость от nodejs
с помощью npm
и angularjs
с помощью bower
независимо? Или каковы способы совместного использования одного и того же кода между интерфейсом и бэкэнд?
Ответы
Ответ 1
Есть несколько способов сделать это. Во-первых, вы можете создать новый пакет, который требуется через bower для кода front-end и через npm для внутреннего кода. У меня есть несколько пакетов, опубликованных в обеих системах.
Установить с Bower - информация о том, как установить модули, которые не находятся в реестре
NPM Install docs - все способы установки с помощью npm (частный github с auth: git+ssh://[email protected]/[org]/[repo]
)
Просто создайте новый модуль с вашими общими данными и установите его с помощью обоих менеджеров пакетов. Оба они позволяют установить неопубликованный модуль, поэтому, если это личные данные, вы можете сохранить их как таковые.
Если ваш передний конец требует require.js
, вы можете использовать что-то вроде amdefine
, чтобы сделать его доступным для вашего бэкэнда node, или если вы просто используя устаревший код окна, вы можете сделать что-то вроде:
var mydata = {};
if(typeof window !== 'undefined'){
window.mydata = mydata;
} else {
module.exports = mydata;
}
Если вы делитесь большим количеством данных, хотя я настоятельно рекомендую заглянуть в браузер, чтобы написать всю вашу кодовую базу в commonjs и использовать браузер для генерации вашего клиентского пакета. Существует список доступных ресурсов об использовании браузера, в том числе о том, как использовать браузеру и angular вместе
Ответ 2
Отказ от ответственности - я все еще разрабатываю этот подход, и это небольшое руководство.
Я сделал это, используя npm, npm cli, называемый pac, и bower. Pac позволил мне избежать использования npm install
в производстве, сохранив модули как .tgz файлы (которые были реализованы для управления исходным кодом). С pac, когда кто-то проверяет проект node, они запускают pac install
, а затем npm rebuild
вместо npm install
.
Мой общий код хранится в каталоге (my-module). Он имеет как package.json, так и bower.json.
У моего потребительского node приложения есть зависимость package.json для:
"my-module": "x.y.z"
Мой потребитель-клиент имеет зависимость bower.json для:
"my-module": "../relative/path/to/my-module"
Когда я делаю обновления для моего модуля, я обновляю приложение node с помощью:
- Создание tar.gz содержимого моего модуля:
tar -czvf my-module.tar.gz -C my-module
- Удаление старой версии из приложения node node_modules
- Rerunning
npm install path/to/my-module-tar.gz
- Rerunning pac (это делает .tgz node_modules/my-module)
- Выполнение обновления pac.modules/my-module.tgz
Я обновляю свой клиент:
- Удаление старого клиента /bower _components/my-module
- Rerunning
bower install
или bower update