Arhn - архитектура программирования

Макет проекта Node.js для сборки/тестирования и развертывания

Я работаю над своим первым проектом Cloud Foundry (... и первым проектом Node.js, и первым проектом MongoDB, и первым «экспресс-проектом» и т. д. и т. д.)

В первый же день я нашел этот вопрос и использовал ответ как отправную точку для организации моего репозитория на github:

Структура папок для проекта Node.js

Существует каталог /node_modules, который не зарегистрирован. Вместо этого он создается автоматически npm install на основе спецификации в файле package.json. Хорошо, хорошо... Я сделал этот файл.

(Примечание: во время vmc push кажется, что сервер не проверяет файл package.json. Похоже, что он просто копирует каталог node_modules и ничего не делает, если он не существует... поэтому необходимо выполнить npm install на вашем клиенте, а ЗАТЕМ нажать.)

У меня есть некоторые основы, работающие в моем приложении, и сейчас я нахожусь в той точке, где я хотел бы начать тестирование и создание инфраструктуры. Например: мне нужен процесс сборки, который будет запускать линтинг для всего моего JavaScript. Существует библиотека непрерывной интеграции под названием ready.js, которая выглядит как современный инструмент сборки. ...

Но что-то кажется неправильным в том, что я нахожусь в каталоге моего проекта и делаю npm install ready.js. Это означает, что больше всего будет помещаться в каталог /node_modules и загружаться в облако, когда оно не предназначено для работы в облаке. Точно так же: если у меня есть процесс сборки, который выполняет минимизацию ресурсов (или что-то еще), то я также не хочу, чтобы исходный код развертывался с помощью vmc push.

Я знаю, что все это ново... но есть ли соглашение о том, чтобы сбрасывать цели в каталог сборки и отправлять оттуда? Или все продвигаются из того, что фактически является корнем github, а также просто продвигают все сборки и тесты? Любые советы приветствуются... методы использования, методы, которых следует избегать...

ОБНОВЛЕНИЕ: я нашел шаблон приложения для использования Express и Node.js (а также нескольких других распространенных модулей), который выполняет свой «процесс сборки» внутри javascript кода сервера... к лучшему или к худшему :

https://github.com/mape/node-express-boilerplate

Я также нашел это, и кажется, что сочетание термина «шаблон» с именами модулей, которые вы хотели бы видеть включенными в структуру, является хорошей стратегией поиска для поиска того, что я ищу:

https://github.com/swbiggart/node-express-requirejs-backbone


Ответы:


1

npm позволяет указать devDependencies, вы можете ознакомиться с этой статьей.

Вы можете добавить все зависимости среды разработки/тестирования в devDependencies и все модули, связанные с производством, в dependencies. Затем вы можете добавить скрипт для отправки в облако.

Я не знаком с Cloud Foundry или рабочим процессом vmc push. Но вы можете добавить собственный скрипт к объекту scripts в package.json, который устанавливает модули среды разработки, запускает ваши тесты, очищает кеш npm, затем устанавливает модули только для производства и отправляет ваш код и только эти модули в облако.

изменить

Я не уверен, что вы можете использовать их, если не отправляетесь в репозиторий npm, но они полезны в качестве примера (я думаю...). В качестве альтернативы вы можете автоматизировать рабочий процесс, описанный выше, в сценарии оболочки или сценарии узла.

/изменить

Вы можете подключиться к любому из доступных скриптов... (см. man npm-scripts для получения дополнительной информации):

   preinstall
          Run BEFORE the package is installed

   install, postinstall
          Run AFTER the package is installed.

   preuninstall, uninstall
          Run BEFORE the package is uninstalled.

   postuninstall
          Run AFTER the package is uninstalled.

   preupdate
          Run BEFORE the package is updated with the update command.

   update, postupdate
          Run AFTER the package is updated with the update command.

   prepublish
          Run BEFORE the package is published.

   publish, postpublish
          Run AFTER the package is published.

   pretest, test, posttest
          Run by the npm test command.

   prestop, stop, poststop
          Run by the npm stop command.

   prestart, start, poststart
          Run by the npm start command.

   prerestart, restart, postrestart
          Run by the npm restart command. Note: npm restart will  run  the
          stop and start scripts if no restart script is provided.

   Additionally,  arbitrary  scrips  can  be  run  by doing npm run-script
   <stage> <pkg>.

Обратите внимание, publish здесь для публикации модуля в npm. Вы должны сделать свой пакет закрытым ("private": true), чтобы случайно не опубликовать свой код в репозитории npm.

19.04.2012
  • см. jade\package.json для примера того, как все это подходит вместе. 19.04.2012
  • Интересные вещи, чтобы знать, и все новое для меня-спасибо! Это позаботится об одной оси проблемы, относящейся к node_modules... хотя кажется, что можно было бы нажать из специального альтернативного каталога npm install --production. Тем не менее, проблема с наличием лишних исходных файлов в подкаталогах, которые CloudFoundry просто подбирает, останется, поэтому я надеюсь, что здесь также есть некоторые идиомы CloudFoundry... 19.04.2012
  • Обновление... Я нашел этот файл ready.js, и, похоже, он соответствует тому, что я ищу, по крайней мере, в настоящее время он поддерживается. Я до сих пор не уверен, как организовать рабочий процесс... должны ли быть задействованы скрипты npm, или мне следует написать простые make-файлы JavaScript, чтобы создать каталог /build, который я на самом деле запускаю: github.com/dsimard/ready.js 21.04.2012
  • Я посмотрел на ready.js, и он, похоже, ориентирован на написание согласованного кода и минимизацию кода. Я также кратко просмотрел cloudfoundry/vmc на github и не нашел способа указать файлы или модули, включенные в развернутое приложение. Я использую heroku для своих приложений node.js, что упрощает развертывание... Я добавляю файлы/папки в .gitignore, и они не загружаются. Я наткнулся на это видео, в котором обсуждается Code2Cloud и CI/развертывание в Cloud Foundry. 21.04.2012
  • Глядя на код, всегда выигрываю. :) Ну, тогда, если вы посмотрели на vmc и не можете выделить подмножество того, что нажимается, тогда похоже, что отправка из каталога сборки - это путь ... есть ли у вас какие-либо личные рекомендации для того, какие методы сценариев/сборки Я мог бы использовать, чтобы заполнить этот каталог сборки из разрозненных ресурсов в репозитории? :-/ 21.04.2012
  • Если бы это был я, я бы использовал makefile. В моем клоне Mastering Node, чтобы отправить текущие изменения на gh-страницы, я извлекаю репозиторий gh-pages в подкаталог, перемещаю все соответствующие изменения в подкаталог, затем выдаю сообщение для ручной проверки и отправляю в gh-pages см. Makefile. Вы можете смешать архив git и devDependencies для тестирования, заархивировать в \build, npm install --production, а затем нажать. 21.04.2012
  • Эй, я добавил несколько ссылок на вопрос. Кажется, что термин «шаблон» хорошо подходит для поиска в Google, если кому-то это интересно. Я пытаюсь выяснить, насколько целесообразно разветвлять стандартные проекты/подпроекты git, чтобы я мог наследовать последующие изменения... хотя это оказывает большее давление на процесс сборки для интеграции файлов из git -отслеживаются места, где они должны быть. Спасибо за помощь... Я буду настаивать на этом и, возможно, вернусь к вещам старой школы, таким как make-файлы. Комментарии приветствуются: github.com/hostilefork/blackhighlighter 08.05.2012
  • Я должен проверить ваш проект позже. Мне интересно посмотреть, как это совмещается. Что касается шаблонов, некоторые люди их любят, а некоторые ненавидят. Я попытался использовать экспресс-шаблон и в итоге удалил весь шаблонный код, потому что он не был полезен в моей ситуации. 08.05.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..