Add all build steps

This commit is contained in:
Daniel_I_Am 2022-05-26 11:44:06 +02:00
parent 087ece9e51
commit 4587a44b76
9 changed files with 8467 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build/
node_modules/

23
docker-compose.yml Normal file
View File

@ -0,0 +1,23 @@
version: '3.8'
services:
nginx:
image: daniel-website/nginx:dev
build:
context: ./docker/nginx
ports:
- 127.0.0.1:8080:80
volumes:
- ./build:/var/www/html
webpack:
image: daniel-website/webpack:dev
build:
context: ./docker/webpack
volumes:
- ./src:/code/src
- ./build:/code/build
- ./node_modules:/code/node_modules
- ./package.json:/code/package.json
- ./package-lock.json:/code/package-lock.json
- ./webpack.config.js:/code/webpack.config.js
tty: true

3
docker/nginx/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM nginx:1.22.0-alpine
COPY ./etc/nginx/conf.d/ /etc/nginx/conf.d/

View File

@ -0,0 +1,14 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# redirect server error pages to a static page
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}

View File

@ -0,0 +1,9 @@
FROM node:18
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER node
WORKDIR /code
CMD ["npm", "run", "build:watch"]

6
docker/webpack/entrypoint.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
set -e
npm i
exec "$@"

8311
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

34
package.json Normal file
View File

@ -0,0 +1,34 @@
{
"private": true,
"name": "personal-site",
"version": "1.0.0",
"description": "This the repository for Daniel's personal website.",
"scripts": {
"build": "webpack --mode=production",
"build:dev": "webpack --mode=development",
"build:watch": "webpack --mode=development --watch",
"start:dev": "webpack-dev-server --mode=development"
},
"repository": {
"type": "git",
"url": "ssh://git@git.chaoticlogic.us:2302/daniel/personal-website.git"
},
"keywords": [
"portfolio",
"website"
],
"author": "Daniel \"Daniel_I_Am\" de Cloet",
"devDependencies": {
"css-loader": "^6.7.1",
"dart-sass": "^1.25.0",
"html-webpack-plugin": "^5.5.0",
"mini-css-extract-plugin": "^2.6.0",
"pug": "^2.0.4",
"pug-loader": "^2.4.0",
"sass-loader": "^13.0.0",
"style-loader": "^3.3.1",
"webpack": "^5.72.1",
"webpack-cli": "^4.9.2",
"webpack-dev-server": "^4.9.0"
}
}

65
webpack.config.js Normal file
View File

@ -0,0 +1,65 @@
const fs = require('fs');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { ModuleFilenameHelpers } = require('webpack');
function getPugHtmlPluginEntries(basepath) {
const pugTemplateFiles = fs.readdirSync(basepath)
.filter(file => path.extname(file).toLowerCase() === '.pug');
return pugTemplateFiles.map(pugFileName => new HtmlWebpackPlugin({
inject: true,
hash: false,
filename: `${path.parse(pugFileName).name}.html`,
template: path.join(basepath, pugFileName),
}));
}
module.exports = (env, argv) => {
const isDevelopment = argv.mode === 'development';
return {
entry: {
app: './src/js/app.js',
},
output: {
path: path.resolve(__dirname, 'build'),
filename: "[name].bundle.js",
},
devServer: {
port: 3000,
},
plugins: [
...getPugHtmlPluginEntries('./src'),
new MiniCssExtractPlugin({
filename: isDevelopment ? '[name].css' : '[name].[hash].css',
chunkFilename: isDevelopment ? '[id].css' : '[id].[hash].css',
}),
],
module: {
rules: [
{
test: /\.pug$/,
use: ["pug-loader"],
},
{
test: /\.scss$/,
use: [
isDevelopment ? "style-loader" : MiniCssExtractPlugin.loader,
"css-loader",
{
loader: "sass-loader",
options: {
sourceMap: isDevelopment,
},
},
],
},
],
},
resolve: {
extensions: ['.js', '.scss'],
},
};
}