Fix monorepo build

This commit is contained in:
schmelczerandras 2020-10-17 17:24:24 +02:00
parent 2d67b7d939
commit fd80a299b6
14 changed files with 99 additions and 83 deletions

View file

@ -7,6 +7,8 @@ RUN apt update && export DEBIAN_FRONTEND=noninteractive \
RUN git lfs install RUN git lfs install
RUN npm i -g yarn concurrently
ENV ZSH_CUSTOM /root/.oh-my-zsh/ ENV ZSH_CUSTOM /root/.oh-my-zsh/
RUN git clone https://github.com/reobin/typewritten.git $ZSH_CUSTOM/themes/typewritten RUN git clone https://github.com/reobin/typewritten.git $ZSH_CUSTOM/themes/typewritten
RUN ln -s "$ZSH_CUSTOM/themes/typewritten/typewritten.zsh-theme" "$ZSH_CUSTOM/themes/typewritten.zsh-theme" RUN ln -s "$ZSH_CUSTOM/themes/typewritten/typewritten.zsh-theme" "$ZSH_CUSTOM/themes/typewritten.zsh-theme"

View file

@ -10,7 +10,7 @@
"terminal.integrated.shell.linux": "/bin/zsh", "terminal.integrated.shell.linux": "/bin/zsh",
"files.exclude": { "files.exclude": {
"**/node_modules": true, "**/node_modules": true,
"**/package-lock.json": true, "**/yarn.lock": true,
"**/dist": true, "**/dist": true,
"**/lib": true, "**/lib": true,
"**/.firebase": true "**/.firebase": true
@ -19,7 +19,6 @@
"editor.detectIndentation": false, "editor.detectIndentation": false,
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
"eslint.enable": true,
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll.eslint": true "source.fixAll.eslint": true
}, },
@ -43,11 +42,11 @@
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached", "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
"workspaceFolder": "/workspace", "workspaceFolder": "/workspace",
"mounts": [ "mounts": [
"source=decla-red-root-node_modules-volume2,target=/workspace/node_modules,type=volume", "source=decla-red-root-node_modules-volume3,target=/workspace/node_modules,type=volume",
"source=decla-red-frontend-node_modules-volume2,target=/workspace/frontend/node_modules,type=volume", "source=decla-red-frontend-node_modules-volume3,target=/workspace/frontend/node_modules,type=volume",
"source=decla-red-backend-node_modules-volume2,target=/workspace/backend/node_modules,type=volume", "source=decla-red-backend-node_modules-volume3,target=/workspace/backend/node_modules,type=volume",
"source=decla-red-shared-node_modules-volume2,target=/workspace/shared/node_modules,type=volume" "source=decla-red-shared-node_modules-volume3,target=/workspace/shared/node_modules,type=volume"
], ],
"forwardPorts": [3000, 8080], "forwardPorts": [3000, 8080],
"postCreateCommand": "chown node:node ./**/node_modules && npm install && npm run initialize && npm run build" "postCreateCommand": "chown node:node ./**/node_modules && yarn"
} }

4
.gitignore vendored
View file

@ -1,6 +1,6 @@
dist dist
lib lib
node_modules node_modules
package-lock.json
.firebase .firebase
lerna-debug.log yarm-error.log
yarn.lock

View file

@ -1,7 +1,8 @@
FROM node:14.13.0-alpine3.10 as build FROM node:14.13.0-alpine3.10 as build
COPY . . COPY . .
RUN npm install && npm run initialize && npm run build RUN npm i -g concurrently
RUN yarn && yarn run build
FROM node:14.13.0-alpine3.10 FROM node:14.13.0-alpine3.10

View file

@ -1,3 +1,9 @@
# decla.red # decla.red
![Deploy everything](https://github.com/schmelczerandras/decla.red/workflows/Deploy%20everything/badge.svg) ![Deploy everything](https://github.com/schmelczerandras/decla.red/workflows/Deploy%20everything/badge.svg)
## Development
- Open the devconatiner in VS Code
- Run `yarn start`
- Open [localhost:8080](http://localhost:8080)

View file

@ -1,19 +1,18 @@
{ {
"name": "declared-server", "name": "declared-server",
"version": "0.0.2",
"description": "Game server for decla.red", "description": "Game server for decla.red",
"keywords": [], "keywords": [],
"author": "András Schmelczer <andras@schmelczer.dev> (https://schmelczer.dev/)", "author": "András Schmelczer <andras@schmelczer.dev> (https://schmelczer.dev/)",
"version": "0.0.1-try2",
"main": "dist/main.js", "main": "dist/main.js",
"scripts": {
"build": "npx webpack --mode production",
"initialize": "npm install",
"start": "concurrently --kill-others \"npx webpack --mode development -w\" \"cd dist && nodemon --legacy-watch main.js\"",
"try-build": "npm run build && cd dist && node main.js && cd -"
},
"bin": { "bin": {
"declared-server": "./dist/main.js" "declared-server": "./dist/main.js"
}, },
"scripts": {
"build": "npx webpack --mode production",
"start": "npx concurrently --kill-others-on-fail \"npx webpack --mode development -w\" \"npx nodemon --legacy-watch dist/main.js\"",
"try-build": "npm run build && cd dist && node main.js && cd -"
},
"dependencies": { "dependencies": {
"@types/config": "0.0.36", "@types/config": "0.0.36",
"cors": "^2.8.5", "cors": "^2.8.5",
@ -24,12 +23,28 @@
"webpack-node-externals": "^2.5.2" "webpack-node-externals": "^2.5.2"
}, },
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.7",
"@types/express": "^4.17.8",
"@types/node": "^14.11.2",
"@types/socket.io": "^2.1.11",
"@typescript-eslint/eslint-plugin": "^3.9.1",
"@typescript-eslint/parser": "^3.9.1",
"clean-webpack-plugin": "^3.0.0", "clean-webpack-plugin": "^3.0.0",
"concurrently": "^5.3.0", "concurrently": "^5.3.0",
"esbuild-loader": "^2.4.0", "eslint": "^7.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-import": "^2.21.2",
"eslint-plugin-json-format": "^2.0.1",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-unused-imports": "^0.1.3",
"file-loader": "^6.1.0",
"ts-loader": "^8.0.3",
"gl-matrix": "^3.3.0",
"nodemon": "^2.0.4", "nodemon": "^2.0.4",
"prettier": "^2.0.5",
"raw-loader": "^4.0.1", "raw-loader": "^4.0.1",
"resolve-url-loader": "^3.1.1", "resolve-url-loader": "^3.1.1",
"shared": "0.0.0",
"terser-webpack-plugin": "^2.3.5", "terser-webpack-plugin": "^2.3.5",
"typescript": "^4.0.3", "typescript": "^4.0.3",
"webpack": "^4.43.0", "webpack": "^4.43.0",

View file

@ -1,5 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"outDir": "dist",
"sourceMap": true, "sourceMap": true,
"declaration": true, "declaration": true,
"declarationMap": true, "declarationMap": true,
@ -13,5 +14,5 @@
"composite": true, "composite": true,
"lib": ["dom", "es2017"] "lib": ["dom", "es2017"]
}, },
"include": ["src/**/*.ts", "src/*.ts"] "include": ["src/**/*.ts"]
} }

View file

@ -1,7 +1,6 @@
const path = require('path'); const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const nodeExternals = require('webpack-node-externals'); const nodeExternals = require('webpack-node-externals');
const { ESBuildPlugin } = require('esbuild-loader');
const TerserJSPlugin = require('terser-webpack-plugin'); const TerserJSPlugin = require('terser-webpack-plugin');
const webpack = require('webpack'); const webpack = require('webpack');
@ -43,7 +42,6 @@ module.exports = (env, argv) => ({
}, },
plugins: [ plugins: [
new webpack.BannerPlugin({ banner: '#!/usr/bin/env node', raw: true }), new webpack.BannerPlugin({ banner: '#!/usr/bin/env node', raw: true }),
new ESBuildPlugin(),
new CleanWebpackPlugin({ new CleanWebpackPlugin({
protectWebpackAssets: false, protectWebpackAssets: false,
cleanAfterEveryBuildPatterns: [], cleanAfterEveryBuildPatterns: [],
@ -63,10 +61,8 @@ module.exports = (env, argv) => ({
}, },
{ {
test: /\.ts$/, test: /\.ts$/,
loader: 'esbuild-loader', use: {
options: { loader: 'ts-loader',
loader: 'ts',
target: 'es2015',
}, },
exclude: /node_modules/, exclude: /node_modules/,
}, },

View file

@ -1,6 +1,6 @@
{ {
"name": "decla.red-frontend", "name": "decla.red-frontend",
"private": true, "version": "0.0.0",
"description": "![logo](media/declared.png)", "description": "![logo](media/declared.png)",
"keywords": [], "keywords": [],
"author": "András Schmelczer <andras@schmelczer.dev> (https://schmelczer.dev/)", "author": "András Schmelczer <andras@schmelczer.dev> (https://schmelczer.dev/)",
@ -10,7 +10,6 @@
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"build": "npx webpack --mode production", "build": "npx webpack --mode production",
"initialize": "npm install",
"start": "npx webpack-dev-server --mode development", "start": "npx webpack-dev-server --mode development",
"try-build": "npm run build && cd dist && python3 -m http.server 8080" "try-build": "npm run build && cd dist && python3 -m http.server 8080"
}, },
@ -18,25 +17,44 @@
"defaults" "defaults"
], ],
"devDependencies": { "devDependencies": {
"@types/socket.io-client": "^1.4.34",
"@typescript-eslint/eslint-plugin": "^3.9.1",
"@typescript-eslint/parser": "^3.9.1",
"autoprefixer": "^9.8.5",
"clean-webpack-plugin": "^3.0.0", "clean-webpack-plugin": "^3.0.0",
"esbuild-loader": "^2.4.0", "css-loader": "^3.5.2",
"cssnano": "^4.1.10",
"eslint": "^7.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-import": "^2.21.2",
"eslint-plugin-json-format": "^2.0.1",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-unused-imports": "^0.1.3",
"file-loader": "^6.1.0",
"firebase": "^7.22.0",
"gl-matrix": "^3.3.0",
"html-webpack-inline-source-plugin": "0.0.10", "html-webpack-inline-source-plugin": "0.0.10",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^3.2.0",
"image-webpack-loader": "^6.0.0", "image-webpack-loader": "^6.0.0",
"mini-css-extract-plugin": "^0.9.0", "mini-css-extract-plugin": "^0.9.0",
"optimize-css-assets-webpack-plugin": "^5.0.3", "optimize-css-assets-webpack-plugin": "^5.0.3",
"postcss-loader": "^3.0.0", "postcss-loader": "^3.0.0",
"prettier": "^2.0.5",
"raw-loader": "^4.0.1", "raw-loader": "^4.0.1",
"resolve-url-loader": "^3.1.1", "resolve-url-loader": "^3.1.1",
"ts-loader": "^8.0.3",
"sass": "^1.26.3", "sass": "^1.26.3",
"sass-loader": "^9.0.2", "sass-loader": "^9.0.2",
"sdf-2d": "^0.5.3",
"shared": "0.0.0",
"socket.io-client": "^2.3.1",
"source-map-loader": "^1.1.0",
"svg-url-loader": "^6.0.0", "svg-url-loader": "^6.0.0",
"terser-webpack-plugin": "^4.2.2", "terser-webpack-plugin": "^4.2.2",
"typescript": "^4.0.3", "typescript": "^4.0.3",
"webpack": "^4.43.0", "webpack": "^4.43.0",
"webpack-bundle-analyzer": "^3.9.0", "webpack-bundle-analyzer": "^3.9.0",
"webpack-cli": "^3.3.11", "webpack-cli": "^3.3.11",
"source-map-loader": "^1.1.0",
"webpack-dev-server": "^3.10.3" "webpack-dev-server": "^3.10.3"
}, },
"postcss": { "postcss": {

View file

@ -1,5 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"outDir": "dist",
"sourceMap": true, "sourceMap": true,
"declaration": true, "declaration": true,
"declarationMap": true, "declarationMap": true,
@ -13,5 +14,5 @@
"composite": true, "composite": true,
"lib": ["dom", "es2017"] "lib": ["dom", "es2017"]
}, },
"include": ["**/*.ts"] "include": ["src/**/*.ts"]
} }

View file

@ -6,7 +6,6 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin'); const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');
const Sass = require('sass'); const Sass = require('sass');
const TerserJSPlugin = require('terser-webpack-plugin'); const TerserJSPlugin = require('terser-webpack-plugin');
const { ESBuildPlugin } = require('esbuild-loader');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const PATHS = { const PATHS = {
@ -46,7 +45,6 @@ module.exports = (env, argv) => ({
], ],
}, },
plugins: [ plugins: [
new ESBuildPlugin(),
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
xhtml: true, xhtml: true,
template: './src/index.html', template: './src/index.html',
@ -105,10 +103,8 @@ module.exports = (env, argv) => ({
}, },
{ {
test: /\.ts$/, test: /\.ts$/,
loader: 'esbuild-loader', use: {
options: { loader: 'ts-loader',
loader: 'ts',
target: 'es2015',
}, },
exclude: /node_modules/, exclude: /node_modules/,
}, },

View file

@ -1,8 +0,0 @@
{
"packages": [
"frontend",
"shared",
"backend"
],
"version": "0.0.0"
}

View file

@ -1,43 +1,22 @@
{ {
"name": "root", "name": "root",
"private": true, "private": true,
"workspaces": {
"packages": [
"frontend",
"shared",
"backend"
],
"nohoist": [
"**"
]
},
"scripts": { "scripts": {
"build": "lerna run build-before && lerna run build", "build": "yarn workspaces shared run build && yarn workspaces frontend run build && yarn workspaces backend run build",
"initialize": "lerna link && lerna run initialize",
"lint": "eslint './**/src/**/*.{js,ts,json}' --fix", "lint": "eslint './**/src/**/*.{js,ts,json}' --fix",
"start": "lerna run --parallel start", "frontend": "yarn workspace decla.red-frontend start",
"try-build": "lerna run --parallel try-build-before && lerna run --parallel try-build" "shared": "yarn workspace shared start",
}, "backend": "yarn workspace declared-server start",
"dependencies": { "start": "concurrently --kill-others-on-fail \"yarn frontend\" \"yarn shared\" \"yarn backend\""
"decla.red-frontend": "file:frontend",
"shared": "file:shared"
},
"devDependencies": {
"@types/cors": "^2.8.7",
"@types/express": "^4.17.8",
"@types/node": "^14.11.2",
"@types/socket.io": "^2.1.11",
"@types/socket.io-client": "^1.4.34",
"@types/uuid": "^8.0.0",
"@typescript-eslint/eslint-plugin": "^3.9.1",
"@typescript-eslint/parser": "^3.9.1",
"autoprefixer": "^9.8.5",
"css-loader": "^3.5.2",
"cssnano": "^4.1.10",
"eslint": "^7.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-import": "^2.21.2",
"eslint-plugin-json-format": "^2.0.1",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-unused-imports": "^0.1.3",
"file-loader": "^6.1.0",
"firebase": "^7.22.0",
"gl-matrix": "^3.3.0",
"lerna": "^3.22.1",
"prettier": "^2.0.5",
"sdf-2d": "^0.5.2",
"socket.io-client": "^2.3.1",
"typescript": "^4.0.3",
"uuid": "^8.2.0"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "shared", "name": "shared",
"private": true, "version": "0.0.0",
"description": "Shared library between backend and frontend", "description": "Shared library between backend and frontend",
"main": "lib/main.js", "main": "lib/main.js",
"types": "lib/src/main.d.ts", "types": "lib/src/main.d.ts",
@ -8,13 +8,23 @@
"lib" "lib"
], ],
"scripts": { "scripts": {
"build-before": "npx webpack --mode production", "build": "npx webpack --mode production",
"initialize": "npm install",
"start": "npx webpack --mode development --watch", "start": "npx webpack --mode development --watch",
"try-build-before": "npx webpack --mode production" "try-build-before": "npx webpack --mode production"
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^3.9.1",
"@typescript-eslint/parser": "^3.9.1",
"clean-webpack-plugin": "^3.0.0", "clean-webpack-plugin": "^3.0.0",
"eslint": "^7.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint-plugin-import": "^2.21.2",
"eslint-plugin-json-format": "^2.0.1",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-unused-imports": "^0.1.3",
"file-loader": "^6.1.0",
"gl-matrix": "^3.3.0",
"prettier": "^2.0.5",
"terser-webpack-plugin": "^2.3.8", "terser-webpack-plugin": "^2.3.8",
"ts-loader": "^8.0.3", "ts-loader": "^8.0.3",
"typescript": "^4.0.3", "typescript": "^4.0.3",