Create backend server
This commit is contained in:
		
							parent
							
								
									eccd7fdf7c
								
							
						
					
					
						commit
						3220764677
					
				| @ -70,6 +70,15 @@ const Entry = () => ({ | |||||||
|     SimulatorWeb: { |     SimulatorWeb: { | ||||||
|         import: source("./Page/SimulatorWeb/SimulatorWeb.tsx"), |         import: source("./Page/SimulatorWeb/SimulatorWeb.tsx"), | ||||||
|         dependOn: ["Model", "GLRender"] |         dependOn: ["Model", "GLRender"] | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     Service: { | ||||||
|  |         import: source("./Service/Service.ts") | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     ServiceRunner: { | ||||||
|  |         import: source("./Service/Runner.ts"), | ||||||
|  |         dependOn: ["Service"] | ||||||
|     } |     } | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										41
									
								
								config/webpack.service.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								config/webpack.service.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | const { Entry, Output, resolve, TypeScriptRules } = require("./webpack.common"); | ||||||
|  | 
 | ||||||
|  | const AllEntry = Entry(); | ||||||
|  | 
 | ||||||
|  | module.exports = (env) => { | ||||||
|  |      | ||||||
|  |     const config = { | ||||||
|  | 
 | ||||||
|  |         entry: { | ||||||
|  |             Service: AllEntry.Service, | ||||||
|  | 			ServiceRunner: AllEntry.ServiceRunner, | ||||||
|  |         }, | ||||||
|  | 
 | ||||||
|  |         output: Output("[name].js"), | ||||||
|  |         devtool: 'source-map', | ||||||
|  |         mode: "development", | ||||||
|  |         resolve: resolve(), | ||||||
|  | 
 | ||||||
|  |         optimization: { | ||||||
|  |             splitChunks: { | ||||||
|  |                 chunks: 'all', | ||||||
|  |                 minSize: 1000 | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  | 
 | ||||||
|  |         module: { | ||||||
|  |             rules: [ | ||||||
|  |                 TypeScriptRules() | ||||||
|  |             ] | ||||||
|  |         }, | ||||||
|  | 
 | ||||||
|  | 		node: { | ||||||
|  | 			__filename: false, | ||||||
|  | 			__dirname: false | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
|  | 		target: 'node' | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     return config; | ||||||
|  | }; | ||||||
							
								
								
									
										313
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										313
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							| @ -10,7 +10,12 @@ | |||||||
|     "release-lab": "npm run clean & webpack --mode production --no-devtool --config ./config/webpack.lab.js", |     "release-lab": "npm run clean & webpack --mode production --no-devtool --config ./config/webpack.lab.js", | ||||||
|     "hmr-web": "webpack serve --open --config ./config/webpack.web.js", |     "hmr-web": "webpack serve --open --config ./config/webpack.web.js", | ||||||
|     "build-web": "npm run clean & webpack --mode development --config ./config/webpack.web.js", |     "build-web": "npm run clean & webpack --mode development --config ./config/webpack.web.js", | ||||||
|     "release-web": "npm run clean & webpack --mode production --no-devtool --config ./config/webpack.web.js" |     "release-web": "npm run clean & webpack --mode production --no-devtool --config ./config/webpack.web.js", | ||||||
|  |     "build-service": "webpack --mode development --config ./config/webpack.service.js", | ||||||
|  |     "release-service": "webpack --mode production --no-devtool --config ./config/webpack.service.js", | ||||||
|  |     "run-service": "node ./build/ServiceRunner.js --run --path ./build --port 12000", | ||||||
|  |     "build-run-web": "npm run build-web & npm run build-service & npm run run-service", | ||||||
|  |     "release-run-web": "npm run release-web & npm run release-service & npm run run-service" | ||||||
|   }, |   }, | ||||||
|   "keywords": [ |   "keywords": [ | ||||||
|     "artwork", |     "artwork", | ||||||
| @ -21,6 +26,7 @@ | |||||||
|   "author": "MrKBear", |   "author": "MrKBear", | ||||||
|   "license": "GPL", |   "license": "GPL", | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|  |     "@types/detect-port": "^1.3.2", | ||||||
|     "@types/react": "^17.0.38", |     "@types/react": "^17.0.38", | ||||||
|     "@types/react-dom": "^17.0.11", |     "@types/react-dom": "^17.0.11", | ||||||
|     "autoprefixer": "^10.4.2", |     "autoprefixer": "^10.4.2", | ||||||
| @ -41,6 +47,8 @@ | |||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@fluentui/react": "^8.56.0", |     "@fluentui/react": "^8.56.0", | ||||||
|     "@juggle/resize-observer": "^3.3.1", |     "@juggle/resize-observer": "^3.3.1", | ||||||
|  |     "detect-port": "^1.3.0", | ||||||
|  |     "express": "^4.17.3", | ||||||
|     "gl-matrix": "^3.4.3", |     "gl-matrix": "^3.4.3", | ||||||
|     "react": "^17.0.2", |     "react": "^17.0.2", | ||||||
|     "react-dom": "^17.0.2" |     "react-dom": "^17.0.2" | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								source/Service/Runner.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								source/Service/Runner.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | import { Service } from "@Service/Service"; | ||||||
|  | import * as minimist from "minimist"; | ||||||
|  | 
 | ||||||
|  | const args = minimist(process.argv.slice(2)); | ||||||
|  | 
 | ||||||
|  | if (args.run) { | ||||||
|  | 	new Service().run(args.path, args.port); | ||||||
|  | } | ||||||
							
								
								
									
										47
									
								
								source/Service/Service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								source/Service/Service.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | |||||||
|  | import { Express } from "express"; | ||||||
|  | import * as express from "express"; | ||||||
|  | import * as detect from "detect-port"; | ||||||
|  | 
 | ||||||
|  | class Service { | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * 默认端口 | ||||||
|  | 	 */ | ||||||
|  | 	public servicePort: number = 12100; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Express 实例 | ||||||
|  | 	 */ | ||||||
|  | 	public app!: Express; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * 获取空闲接口 | ||||||
|  | 	 */ | ||||||
|  | 	private async getFreePort(): Promise<number> { | ||||||
|  | 
 | ||||||
|  | 		let freePort: number = this.servicePort; | ||||||
|  | 		 | ||||||
|  | 		try { | ||||||
|  | 			freePort = await detect(this.servicePort); | ||||||
|  | 		} catch (err) { | ||||||
|  | 			console.log(err); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return freePort; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public async run(url?: string, port?: number) { | ||||||
|  | 
 | ||||||
|  | 		this.servicePort = port ?? await this.getFreePort(); | ||||||
|  | 
 | ||||||
|  | 		this.app = express(); | ||||||
|  | 
 | ||||||
|  | 		this.app.use("/", express.static(url ?? "./")); | ||||||
|  | 
 | ||||||
|  | 		this.app.listen(this.servicePort); | ||||||
|  | 
 | ||||||
|  | 		console.log("Service: service run in port " + this.servicePort); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export { Service }; | ||||||
| @ -40,6 +40,9 @@ | |||||||
|             ], |             ], | ||||||
|             "@Panel/*": [ |             "@Panel/*": [ | ||||||
|                 "./source/Panel/*" |                 "./source/Panel/*" | ||||||
|  |             ], | ||||||
|  |             "@Service/*": [ | ||||||
|  |                 "./source/Service/*" | ||||||
|             ] |             ] | ||||||
|         } |         } | ||||||
|     }, |     }, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user