ESLint
для линтинга кода, используется свой styleguide основанный наairbnb
стандарте.prettier
для форматирования кода.husky
для запускаgit
-хуков.mocha
для написания тестов.Conventional Commits
Styleguide для коммитов.Release It
для выпуска релизов и автогенерацииCHANGELOG.md
Так же в проекте есть настроенные lib-ы redis, mongoose, nodemailer. Чтобы пользоваться ими нужно установить переменные окружения (см. .env).
import { readFileSync } from 'fs';
import { Server, jsonRpc, Socket, KoaContext } from 'gen-server';
import { Context } from 'koa';
const { Router, makeResponse, makeError, JsonRpcRequest } = jsonRpc;
const server = new Server({
port: 3000,
protocol: 'https', // По умолчанию http
ws: true, // Использовать websocket, по умолчанию false
origins: ['https://site.com', 'https://localhost'],
proxy: true, // Если приложение стоит, например за NGINX. По умолчанию false
sslKey: readFileSync('/root/key.pem'), // Нужно только если protocol не равен http
sslCert: readFileSync('/root/cert.pem'), // Нужно только если protocol не равен http
keys: ['secret 1', 'secret 2'], // Ключи для подписи cookies
helmet: { contentSecurityPolicy: false }, // Настройки middleware-а koa-helmet
createPidFile: true, // Нужно ли создавать файл с id процесса, по умолчанию false
pidFilePath: process.cwd() + '/process.pid', // Куда записывать pid-файл. Не нужно если createPidFile = true. По умолчанию = process.cwd() + '/process.pid'
rateLimit: { // Настройки middleware-а koa-ratelimit. Необязательно, эти настройки будут по умолчанию.
driver: 'memory',
db: new Map(),
duration: 60000,
id: (ctx: Context) => ctx.ip,
throw: true,
headers: {
remaining: 'X-RateLimit-Remaining',
reset: 'X-RateLimit-Reset',
total: 'X-Rate-Limit-Total',
},
disableHeader: false,
max: 35000,
},
staticPath: '/var/www/assets', // Если нужно чтобы Node.js отдавал статику
});
const router = new Router('/api', [
{
method: 'ping.pong',
handler: (jsonRpcRequest: JsonRpcRequest<number[]>, ctx: KoaContext) => {
const { params } = jsonRpcRequest;
Socket.io.emit('jsonrpc', makeResponse(params, jsonRpcRequest)); // Будет работать только если сервер с опцией ws = true
return params;
},
},
{
method: 'error.method',
handler: (jsonRpcRequest: JsonRpcRequest<string[]>, ctx: KoaContext) => {
return makeError(jsonRpcRequest, 777, 'Сообщение ошибки.');
}
},
]);
server.use(router.execute());
server.start();
Запуск nodemon в development
режиме:
npm start
Сборка в папку build
:
npm run build
Запуск eslint
и prettier
с фиксами ошибок (только для staged-файлов):
npm run lint-staged
Запуск тестов:
npm test
Создание коммит на основе Conventional Commits
:
npm run commit
Выпуск релиза.
В .env нужно обязательно установить переменную GITHUB_TOKEN
) с токеном для github-а.
Подробнее про выкладки релизов на github можно почитать здесь
release:patch` `release:minor` `release:major