Как собрать серверное приложение nodejs и подготовить его к распространению? - PullRequest
0 голосов
/ 10 июля 2019

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

Мне любопытно узнать, каков подход к созданию копии приложения в текущем проекте, которая готова к перемещению в расположение с поддержкой сервера.

Прямо сейчас мое серверное приложение представляет собой git-репозиторий, в котором есть все обычные файлы вместе с исходной папкой:

./src/server/index.js

Мы просто копируем все, что находится в папке ./src/server, в ./dist/, а затем копируем package.json в ./dist?

Затем мы копируем содержимое папки ./dist в место, которое сможет обслуживать приложение, например /www/app2/, и внутри этого места мы проверяем, что у нас есть NODE_ENV=production в среде, и запускаем npm install вытащить производственные зависимости?

Но тогда наш файл package.json все равно будет содержать сценарии, связанные с разработкой, и другие вещи, которые нам не нужны в работе?

Каков наилучший способ развертывания приложения NodeJs?

--- ОБНОВЛЕНИЕ ---

Это то, что я до сих пор прототипировал, и оно работает:

"scripts": {
        "clean:dist": "./node_modules/.bin/rimraf dist",
        "prep:dist": "./node_modules/.bin/mkdirp ./dist",
        "copy:server": "./node_modules/.bin/ycopy ./src/server/ ./dist/ -r '^((?!tests$).)*$' -i",
        "copy:package": "./node_modules/.bin/copyfiles package-production.json ./dist/",
        "build": "npm run clean:dist && npm run prep:dist && npm run copy:server",
        "start:dev": "nodemon src/server/index.js",
        "start:server": "node dist/server/index.js",
        "prompt": "echo 'No prompt functionality available'",
        "greet": "echo 'Welcome to my project.'"
    },

Таким образом, идея состоит в том, чтобы выборочно перемещать биты из папки dev/src в рабочую готовую папку dist. Идея, лежащая в основе простого файла package.json, заключается в том, что нам не понадобятся зависимости dev, и нам также не понадобится большая часть dev scripts. Так что, вероятно, будет достаточно чего-то вроде следующего:

"scripts": {
    "setup:server": "NODE_ENV='production' && npm install"
    "start:server": "pm2 start index.js"
}

... или, может быть, мы хотим, чтобы внутри ./dist/bin было несколько сценариев csh/bash, которые упростят процесс запуска.

"scripts": {
    "start:server": "./bin/launcher"
}

Я определенно вижу необходимость в пользовательской древовидной структуре проекта, существующей в папке ./dist и полностью отличной от структуры ./src.

1 Ответ

0 голосов
/ 10 июля 2019

Я не уверен, почему «разработка» содержимого вашего package.json является проблемой, поэтому, возможно, я не понимаю суть вашей проблемы.Однако для нашей среды мы развертываем все наши приложения для узлов (в первую очередь микросервисы) с ansible.Пакет развертывания - это просто tarball (может быть файл zip).В пакет ANSIBLE входят шаблоны для файла config.js и файла pm2 startup.json, которые настраиваются в зависимости от среды назначения (подготовка / тестирование и производство).

Дайте мне знать, если вы хотитеЕще несколько подробностей, если вы заинтересованы в этом подходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...