Подтвердить что ты не робот

Обмен кодом между AngularJS и Nodejs

Каков наилучший способ совместного использования кода между интерфейсом и бэкэнд с помощью javascript, в частности, между nodejs и angularjs?

Дело в том, что мы используем те же enums и constant values, что и error codes как в бэкэнд, так и в интерфейсе. Сейчас мы просто копируем и вставляем каждое изменение на обе платформы, что не является хорошим решением. Существуют также некоторые сервисы, которые можно использовать.

Я видел такие библиотеки, как browserify; но это не совсем то, что я ищу. Я ищу решение, подобное maven dependency в java. В java библиотеки можно легко использовать с помощью maven, тогда как я не могу найти аналогичный способ сделать это в javascript. Есть ли способ изолировать эти службы и дать им как зависимость от nodejs с помощью npm и angularjs с помощью bower независимо? Или каковы способы совместного использования одного и того же кода между интерфейсом и бэкэнд?

4b9b3361

Ответ 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