Прежде всего, мне не нужен способ упаковать мое приложение в один исполняемый файл.
Мне любопытно узнать, каков подход к созданию копии приложения в текущем проекте, которая готова к перемещению в расположение с поддержкой сервера.
Прямо сейчас мое серверное приложение представляет собой 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
.