build: Refine server build steps

This commit is contained in:
Maksim Eltyshev
2025-11-28 17:45:31 +01:00
parent 68e5c33418
commit fedee157c7
10 changed files with 159 additions and 42 deletions

36
server/.buildignore Normal file
View File

@@ -0,0 +1,36 @@
**/.gitkeep
**/.DS_Store
build.js
generate-swagger.js
nodemon.json
swagger.json
version-template.ejs
.buildignore
.editorconfig
.env
.eslintignore
.gitignore
.npmrc
.tmp
.venv
dist
logs
node_modules
test
views/*
public/*
!public/preloaded-favicons
!public/favicons
public/favicons/*
!public/user-avatars
public/user-avatars/*
!public/background-images
public/background-images/*
private/*
!private/attachments
private/attachments/*

11
server/.gitignore vendored
View File

@@ -131,6 +131,12 @@ lib-cov
swagger.json
dist
logs
views/*
!views/.gitkeep
public/*
!public/preloaded-favicons
!public/favicons
@@ -147,8 +153,3 @@ private/*
!private/attachments
private/attachments/*
!private/attachments/.gitkeep
views/*
!views/.gitkeep
logs

42
server/build.js Normal file
View File

@@ -0,0 +1,42 @@
const fs = require('fs');
const path = require('path');
// eslint-disable-next-line import/no-extraneous-dependencies
const ignore = require('ignore');
const OUT_DIR = 'dist';
const ig = ignore();
if (fs.existsSync('.buildignore')) {
const patterns = fs.readFileSync('.buildignore', 'utf8');
ig.add(patterns);
}
if (fs.existsSync(OUT_DIR)) {
fs.rmSync(OUT_DIR, { recursive: true, force: true });
}
fs.mkdirSync(OUT_DIR, { recursive: true });
const build = (src, dest) => {
const dirents = fs.readdirSync(src, { withFileTypes: true });
// eslint-disable-next-line no-restricted-syntax
for (const dirent of dirents) {
const srcPath = path.join(src, dirent.name);
if (ig.ignores(srcPath)) {
continue; // eslint-disable-line no-continue
}
const destPath = path.join(dest, dirent.name);
if (dirent.isDirectory()) {
fs.mkdirSync(destPath, { recursive: true });
build(srcPath, destPath);
} else {
fs.copyFileSync(srcPath, destPath);
}
}
};
build('./', OUT_DIR);

View File

@@ -48,6 +48,7 @@
"eslint-config-prettier": "^9.1.2",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.5.4",
"ignore": "^7.0.5",
"mocha": "^10.8.2",
"nodemon": "^3.1.11",
"prettier": "3.3.3",
@@ -1108,6 +1109,16 @@
"url": "https://opencollective.com/eslint"
}
},
"node_modules/@eslint/eslintrc/node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/@eslint/js": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
@@ -4784,6 +4795,16 @@
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/esm": {
"version": "3.2.25",
"resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
@@ -6015,9 +6036,9 @@
}
},
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"dev": true,
"license": "MIT",
"engines": {

View File

@@ -3,6 +3,7 @@
"private": true,
"main": "app.js",
"scripts": {
"build": "node build.js",
"console": "dotenv sails console",
"db:create-admin-user": "node db/create-admin-user.js",
"db:init": "node db/init.js",
@@ -84,6 +85,7 @@
"eslint-config-prettier": "^9.1.2",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.5.4",
"ignore": "^7.0.5",
"mocha": "^10.8.2",
"nodemon": "^3.1.11",
"prettier": "3.3.3",