base
This commit is contained in:
commit
040895a036
|
@ -0,0 +1,11 @@
|
||||||
|
# package management
|
||||||
|
node_modules
|
||||||
|
package-lock.json
|
||||||
|
pnpm-lock.yaml
|
||||||
|
yarn.lock
|
||||||
|
|
||||||
|
# env
|
||||||
|
.env
|
||||||
|
|
||||||
|
# code
|
||||||
|
!*.js
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Attach to docker",
|
||||||
|
"restart": true,
|
||||||
|
"localRoot": ".",
|
||||||
|
"remoteRoot": "/opt/code",
|
||||||
|
"address": "localhost",
|
||||||
|
"port": 9229
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
FROM node:19
|
||||||
|
|
||||||
|
WORKDIR /opt/code
|
||||||
|
|
||||||
|
COPY . /opt/code
|
||||||
|
|
||||||
|
RUN cat .gitignore | xargs rm -rf && \
|
||||||
|
npm i && \
|
||||||
|
./install
|
||||||
|
|
||||||
|
CMD [ "bash", "-c", "if [[ $APP_DEBUG == 'true' ]]; then npm run dev; else npm run prod; fi" ]
|
|
@ -0,0 +1,14 @@
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
server:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
volumes:
|
||||||
|
- './:/opt/code'
|
||||||
|
ports:
|
||||||
|
- '${APP_PORT}:${APP_PORT}'
|
||||||
|
- '9229:9229'
|
||||||
|
env_file: ./.env
|
||||||
|
environment:
|
||||||
|
APP_PORT: '${APP_PORT}'
|
|
@ -0,0 +1,40 @@
|
||||||
|
const gulp = require('gulp');
|
||||||
|
const spawn = require('child_process').spawn;
|
||||||
|
|
||||||
|
/*function clean(cb) {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
function js(cb) {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
function css(cb) {
|
||||||
|
cb();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
gulp.task("serve_dev", (cb) => {
|
||||||
|
console.log('Launching node...');
|
||||||
|
let node = spawn('node', ['--inspect=0.0.0.0', 'index.js'], {stdio: 'inherit'})
|
||||||
|
|
||||||
|
function files(cb) {
|
||||||
|
console.log('Restarting node...');
|
||||||
|
node.kill('SIGTERM');
|
||||||
|
node = spawn('node', ['--inspect=0.0.0.0', 'index.js'], {stdio: 'inherit'})
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
gulp.watch("**", { events: 'all' }, files);
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("serve", (cb) => {
|
||||||
|
console.log('Launching node...');
|
||||||
|
spawn('node', [, 'index.js'], {stdio: 'inherit'})
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
|
exports.default = function() {
|
||||||
|
gulp.watch("**", files);
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
module.exports = {
|
||||||
|
ViewLoader: require('./view_loader')
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
const Eta = require('eta');
|
||||||
|
const fs = require('fs/promises');
|
||||||
|
const glob = require('glob');
|
||||||
|
|
||||||
|
const cwd = process.cwd();
|
||||||
|
const layoutdir = cwd + '/view';
|
||||||
|
|
||||||
|
let compiled = {};
|
||||||
|
|
||||||
|
|
||||||
|
async function loadFile(file) {
|
||||||
|
if (compiled[file]) return compiled[file];
|
||||||
|
compiled[file] = Eta.compile(await fs.readFile(file, 'utf8'));
|
||||||
|
|
||||||
|
return compiled[file];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function preload() {
|
||||||
|
glob(layoutdir + '/*.eta', (err, files) => {
|
||||||
|
files.filter(file => {return !file.startsWith('.');})
|
||||||
|
.forEach(file => {
|
||||||
|
loadFile(file);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function load(name, data) {
|
||||||
|
return (await loadFile(cwd + '/view/' + name))(data, Eta.config);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { load, loadFile, preload }
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
// do startup jobs
|
||||||
|
require('./startup');
|
||||||
|
|
||||||
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
const { APP_PORT } = process.env;
|
||||||
|
|
||||||
|
app.use(require('./routes'));
|
||||||
|
|
||||||
|
const server = app.listen(APP_PORT, () => {
|
||||||
|
console.log("Listening on port " + APP_PORT);
|
||||||
|
});
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
PACKAGES="gulp-cli"
|
||||||
|
|
||||||
|
if [[ $APP_DEBUG == 'true' ]]; then
|
||||||
|
npm i
|
||||||
|
else
|
||||||
|
npm i --prod
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "Installing \033[32m$PACKAGES\033[0m"
|
||||||
|
if [[ APP_DEBUG == 'true' ]]; then
|
||||||
|
npm i -g $PACKAGES
|
||||||
|
else
|
||||||
|
npm i -g --prod $PACKAGES
|
||||||
|
fi
|
||||||
|
echo "All done."
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"watch": ["."],
|
||||||
|
"ext": "js, json, eta,"
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"name": "homepage.js",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"dev": "gulp serve_dev",
|
||||||
|
"prod": "node index.js"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"dotenv": "^16.0.3",
|
||||||
|
"eta": "^2.0.0",
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"glob": "^8.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"gulp": "^4.0.2"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
const Helpers = require('../helpers');
|
||||||
|
|
||||||
|
async function handler(req, res) {
|
||||||
|
res.send(await Helpers.ViewLoader.load('welcome.eta'));
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = (router) => {
|
||||||
|
router.get('/', handler);
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
const express = require('express');
|
||||||
|
const router = express.Router();
|
||||||
|
const glob = require('glob');
|
||||||
|
|
||||||
|
glob(__dirname + "/**/*.js", {}, (er, data) => {
|
||||||
|
if (er) {
|
||||||
|
console.error(er);
|
||||||
|
process.exit(-1);
|
||||||
|
}
|
||||||
|
data
|
||||||
|
.filter(file => {
|
||||||
|
return !file.endsWith('index.js')
|
||||||
|
})
|
||||||
|
.forEach(file => {
|
||||||
|
require(file)(router);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
|
@ -0,0 +1,27 @@
|
||||||
|
console.log('Executing startup jobs...');
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
const hrt = () => {
|
||||||
|
let hr = process.hrtime();
|
||||||
|
return hr[0] + hr[1] / 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function startup() {
|
||||||
|
let t1 = hrt();
|
||||||
|
|
||||||
|
let dotpath = (process.env.APP_DEBUG == 'true') ? '.env.debug' : '.env.prod';
|
||||||
|
|
||||||
|
if (!fs.existsSync(dotpath)) dotpath = '.env';
|
||||||
|
|
||||||
|
require('dotenv').config({
|
||||||
|
path: dotpath
|
||||||
|
});
|
||||||
|
|
||||||
|
await require('./helpers').ViewLoader.preload();
|
||||||
|
console.log('Views compiled in ' + (hrt() - t1) + ' ms');
|
||||||
|
|
||||||
|
console.log('Finished in ' + (hrt() - t1) + " ms");
|
||||||
|
}
|
||||||
|
|
||||||
|
startup();
|
|
@ -0,0 +1,2 @@
|
||||||
|
hi<br/>
|
||||||
|
<%~ Date.now() %>
|
Loading…
Reference in New Issue