Create backend server
This commit is contained in:
parent
eccd7fdf7c
commit
3220764677
@ -70,6 +70,15 @@ const Entry = () => ({
|
||||
SimulatorWeb: {
|
||||
import: source("./Page/SimulatorWeb/SimulatorWeb.tsx"),
|
||||
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",
|
||||
"hmr-web": "webpack serve --open --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": [
|
||||
"artwork",
|
||||
@ -21,6 +26,7 @@
|
||||
"author": "MrKBear",
|
||||
"license": "GPL",
|
||||
"devDependencies": {
|
||||
"@types/detect-port": "^1.3.2",
|
||||
"@types/react": "^17.0.38",
|
||||
"@types/react-dom": "^17.0.11",
|
||||
"autoprefixer": "^10.4.2",
|
||||
@ -41,6 +47,8 @@
|
||||
"dependencies": {
|
||||
"@fluentui/react": "^8.56.0",
|
||||
"@juggle/resize-observer": "^3.3.1",
|
||||
"detect-port": "^1.3.0",
|
||||
"express": "^4.17.3",
|
||||
"gl-matrix": "^3.4.3",
|
||||
"react": "^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/*": [
|
||||
"./source/Panel/*"
|
||||
],
|
||||
"@Service/*": [
|
||||
"./source/Service/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user