Browse Source

reinit

release_0.0.1
巴林闲侠 3 years ago
parent
commit
8728e7f2ab
  1. 16
      api/.vscode/launch.json
  2. 51
      api/config.js
  3. 4
      web/client/index.html
  4. 2
      web/client/src/layout/actions/webSocket.js
  5. 142
      web/client/src/layout/containers/layout/index.jsx
  6. 53
      web/client/src/layout/index.jsx
  7. 28
      web/client/src/sections/auth/actions/auth.js
  8. 2
      web/client/src/sections/auth/containers/login.jsx
  9. 3
      web/client/src/sections/noMatch/containers/noMatch.jsx
  10. 25
      web/client/src/utils/func.js
  11. 11
      web/client/src/utils/index.js
  12. 4
      web/client/src/utils/webapi.js
  13. 35
      web/config.js
  14. 4
      web/middlewares/vite-dev.js
  15. 8
      web/middlewares/webpack-dev.js
  16. 2
      web/package.json
  17. 2
      web/webpack.config.js

16
api/.vscode/launch.json

@ -13,23 +13,15 @@
"NODE_ENV": "development"
},
"args": [
"-p 4000",
"-f http://localhost:4000",
"-g postgres://postgres:123@10.8.30.32:5432/video_access",
"-p 4600",
"-f http://localhost:4600",
"-g postgres://postgres:123@10.8.30.32:5432/orational_service",
"--redisHost 10.8.30.112",
"--redisPort 6379",
"--axyApiUrl http://127.0.0.1:4100",
"--iotAuthApi http://127.0.0.1:4200",
"--godUrl https://restapi.amap.com/v3",
"--godKey 21c2d970e1646bb9a795900dd00093ce",
"--mqttVideoServer mqtt://10.8.30.71:30883",
"--iotVideoServerUrl http://221.230.55.27:8081",
// "--iotVideoServerUrl http://10.8.30.59:8080",
"--cameraPlayWsHost ws://221.230.55.27:8081",
"--cameraPlayHttpFlvHost http://221.230.55.27:2020",
"--cameraPlayHlsHost http://221.230.55.27:8081",
"--cameraPlayRtmpHost rtmp://221.230.55.27:1935",
"--cameraPlayRtspHost rtsp://221.230.55.27:554"
"--mqttVideoServer mqtt://10.8.30.71:30883"
]
},
{

51
api/config.js

@ -17,22 +17,15 @@ args.option('redisPort', 'redisPort');
args.option('redisPswd', 'redisPassword');
args.option('axyApiUrl', '安心云 api');
args.option('iotAuthApi', 'IOT 鉴权 api');
args.option('godUrl', '高德地图API请求地址');
args.option('godKey', '高德地图API key');
args.option('iotVideoServerUrl', '视频后端服务地址');
args.option('mqttVideoServer', '视频后台 mqtt 服务 URL');
args.option('cameraPlayWsHost', '视频播放地址 ws://xxx:xxx');
args.option('cameraPlayHttpFlvHost', '视频播放地址 httpFlv');
args.option('cameraPlayHlsHost', '视频播放地址 hls');
args.option('cameraPlayRtmpHost', '视频播放地址 rtmp');
args.option('cameraPlayRtspHost', '视频播放地址 rtsp');
const flags = args.parse(process.argv);
const IOT_VIDEO_ACCESS_DB = process.env.IOT_VIDEO_ACCESS_DB || flags.pg;
const POMS_DB = process.env.POMS_DB || flags.pg;
const IOT_VIDEO_ACCESS_LOCAL_SVR_ORIGIN = process.env.IOT_VIDEO_ACCESS_LOCAL_SVR_ORIGIN || flags.fileHost;
// Redis 参数
@ -40,8 +33,6 @@ const IOTA_REDIS_SERVER_HOST = process.env.IOTA_REDIS_SERVER_HOST || flags.redis
const IOTA_REDIS_SERVER_PORT = process.env.IOTA_REDIS_SERVER_PORT || flags.redisPort || "6379";//redis 端口
const IOTA_REDIS_SERVER_PWD = process.env.IOTA_REDIS_SERVER_PWD || flags.redisPswd || "";//redis 密码
// 鉴权 api
const IOT_AUTH_API = process.env.IOT_AUTH_API || flags.iotAuthApi;
// 安心云api
const AXY_API_URL = process.env.AXY_API_URL || flags.axyApiUrl;
@ -49,24 +40,11 @@ const AXY_API_URL = process.env.AXY_API_URL || flags.axyApiUrl;
const GOD_URL = process.env.GOD_URL || flags.godUrl || 'https://restapi.amap.com/v3';
const GOD_KEY = process.env.GOD_KEY || flags.godKey;
// 萤石服务的地址
const YINGSHI_URL = process.env.YINGSHI_URL || flags.yingshiUrl || 'https://open.ys7.com/api';
// 视频后台服务的地址
const IOT_VIDEO_SERVER_URL = process.env.IOT_VIDEO_SERVER_URL || flags.iotVideoServerUrl
// 视频后台 mqtt 信息推送地址
const MQTT_VIDEO_SERVER = process.env.MQTT_VIDEO_SERVER || flags.mqttVideoServer;
// 几种国标摄像头播放地址前缀
const CAMERA_PLAY_WS_HOST = process.env.CAMERA_PLAY_WS_HOST || flags.cameraPlayWsHost;
const CAMERA_PLAY_HTTP_FLV_HOST = process.env.CAMERA_PLAY_HTTP_FLV_HOST || flags.cameraPlayHttpFlvHost;
const CAMERA_PLAY_HLS_HOST = process.env.CAMERA_PLAY_HLS_HOST || flags.cameraPlayHlsHost;
const CAMERA_PLAY_RTMP_HOST = process.env.CAMERA_PLAY_RTMP_HOST || flags.cameraPlayRtmpHost;
const CAMERA_PLAY_RTSP_HOST = process.env.CAMERA_PLAY_RTSP_HOST || flags.cameraPlayRtspHost;
if (!IOT_VIDEO_ACCESS_DB || !IOTA_REDIS_SERVER_HOST || !IOTA_REDIS_SERVER_PORT || !GOD_KEY || !MQTT_VIDEO_SERVER ||
!AXY_API_URL || !IOT_VIDEO_SERVER_URL || !IOT_AUTH_API ||
!CAMERA_PLAY_WS_HOST || !CAMERA_PLAY_HTTP_FLV_HOST || !CAMERA_PLAY_HLS_HOST || !CAMERA_PLAY_RTMP_HOST || !CAMERA_PLAY_RTSP_HOST
if (!POMS_DB || !IOTA_REDIS_SERVER_HOST || !IOTA_REDIS_SERVER_PORT || !GOD_KEY || !MQTT_VIDEO_SERVER ||
!AXY_API_URL
) {
console.log('缺少启动参数,异常退出');
args.showHelp();
@ -103,13 +81,6 @@ const product = {
mqtt: {
mqttVideoServer: MQTT_VIDEO_SERVER,
},
cameraPlayHost: {
ws: CAMERA_PLAY_WS_HOST,
httpFlv: CAMERA_PLAY_HTTP_FLV_HOST,
hls: CAMERA_PLAY_HLS_HOST,
rtmp: CAMERA_PLAY_RTMP_HOST,
rtsp: CAMERA_PLAY_RTSP_HOST,
},
sms: {
///阿里云-安心云
accessKey: 'LTAI5tAFdjz7j38aNF2C9Qe8',
@ -120,7 +91,7 @@ const product = {
host: 'smtp.exmail.qq.com',
port: 465,
sender: {
name: '尚视',
name: '运维服务',
address: 'fsiot@free-sun.com.cn',
password: 'Fs2689'
}
@ -140,25 +111,13 @@ const product = {
key: GOD_KEY
}
}
}, {
name: 'yingshiRequest',
root: YINGSHI_URL,
params: {
query: {
key: GOD_KEY
}
}
}, {
name: 'videoServerRequest',
root: IOT_VIDEO_SERVER_URL + '/api',
dataWord: 'text'
},
]
}
}
],
dc: {
url: IOT_VIDEO_ACCESS_DB,
url: POMS_DB,
opts: {
pool: {
max: 80,

4
web/client/index.html

@ -16,11 +16,11 @@
<div id='PomsApp' style="height: 100%;"></div>
<!-- Webpack -->
<script type="text/javascript" src="http://localhost:5001/client/build/app.js"></script>
<script type="text/javascript" src="http://localhost:5601/client/build/app.js"></script>
<!-- Vite -->
<!-- <script type="module">
import RefreshRuntime from "http://localhost:5002/@react-refresh"
import RefreshRuntime from "http://localhost:5602/@react-refresh"
RefreshRuntime.injectIntoGlobalHook(window)
window.$RefreshReg$ = () => { }
window.$RefreshSig$ = () => (type) => type

2
web/client/src/layout/actions/webSocket.js

@ -8,7 +8,7 @@ export function initWebSocket ({ ioUrl, token }) {
ioUrl = JSON.parse(ioUrl).root
}
if (!token) {
const user = sessionStorage.getItem('vcmpUser')
const user = sessionStorage.getItem('pomsUser')
if (user) {
token = JSON.parse(user).token
}

142
web/client/src/layout/containers/layout/index.jsx

@ -26,8 +26,7 @@ let scrollbar
const LayoutContainer = props => {
const {
dispatch, msg, user, copyright, children, sections, clientWidth, clientHeight,
location, match, routes, history, authCrossLoading, socket,
microAppWaiting
location, match, routes, history, socket,
} = props
const [collapsed, setCollapsed] = useState(false)
@ -41,32 +40,32 @@ const LayoutContainer = props => {
}
useEffect(() => {
let topItems=[]//
let siderItems=[]//
for (let c of sections) {
if (typeof c.getNavItem == 'function') {
let item = c.getNavItem(user, dispatch);
if (item) {
if(item.length>0){
let itm = JSON.parse(JSON.stringify(item[0]));
let itms = JSON.parse(JSON.stringify(item[0]));
if(itm.hasOwnProperty('items')){
siderItems.push.apply(siderItems,itms.items)
for (let i = 0; i < itm.items.length; i++) {
delete itm.items[i].items
let topItems = []//
let siderItems = []//
for (let c of sections) {
if (typeof c.getNavItem == 'function') {
let item = c.getNavItem(user, dispatch);
if (item) {
if (item.length > 0) {
let itm = JSON.parse(JSON.stringify(item[0]));
let itms = JSON.parse(JSON.stringify(item[0]));
if (itm.hasOwnProperty('items')) {
siderItems.push.apply(siderItems, itms.items)
for (let i = 0; i < itm.items.length; i++) {
delete itm.items[i].items
}
topItems.push(itm)
}
topItems.push(itm)
}
else{
topItems.push.apply(topItems, item)
}
}
else {
topItems.push.apply(topItems, item)
}
}
}
}
}
console.log('siderItems',siderItems);
console.log('topItems',topItems);
}
}
}
console.log('siderItems', siderItems);
console.log('topItems', topItems);
window.addEventListener('resize', resize_);
return () => {
@ -76,7 +75,7 @@ const LayoutContainer = props => {
useEffect(() => {
NProgress.done();
if ((!user || !user.authorized) && !authCrossLoading) {
if ((!user || !user.authorized)) {
history.push('/signin');
}
if (msg) {
@ -138,68 +137,53 @@ const LayoutContainer = props => {
return (
<Layout id="layout" style={{ height: '100%' }}>
{
authCrossLoading || microAppWaiting ?
<div style={{
// position: 'absolute',
height: '100%', width: '100%',
display: 'flex', alignItems: 'center', placeContent: 'center',
backgroundColor: "#000"
}}>
<video
autoPlay loop muted
style={{}}
src={`${__webpack_public_path__}assets/video/cross_loading.mp4`}
type="video/mp4"
<>
<Layout.Header>
<Header
user={user}
pathname={location.pathname}
toggleCollapsed={() => {
setCollapsed(!collapsed);
}}
collapsed={collapsed}
history={history}
/>
</div>
:
<>
<Layout.Header>
<Header
</Layout.Header>
<Layout style={{ height: 'calc(100% - 60px)' }}>
<Layout.Sider>
<Sider
sections={sections}
dispatch={dispatch}
user={user}
pathname={location.pathname}
toggleCollapsed={() => {
setCollapsed(!collapsed);
}}
collapsed={collapsed}
history={history}
/>
</Layout.Header>
<Layout style={{ height: 'calc(100% - 60px)' }}>
<Layout.Sider>
<Sider
sections={sections}
dispatch={dispatch}
user={user}
pathname={location.pathname}
collapsed={collapsed}
/>
</Layout.Sider>
<Layout.Content>
<div style={{
margin: '12px 12px 0px',
background: "#F6FAFF",
</Layout.Sider>
<Layout.Content>
<div style={{
margin: '12px 12px 0px',
background: "#F6FAFF",
}}>
<div id="page-content" style={{
height: clientHeight - 12,
minWidth: 520,
position: 'relative',
}}>
<div id="page-content" style={{
height: clientHeight - 12,
minWidth: 520,
<div style={{
minHeight: clientHeight - 32 - 12,
position: 'relative',
padding: '12px 8px',
}}>
<div style={{
minHeight: clientHeight - 32 - 12,
position: 'relative',
padding: '12px 8px',
}}>
{children}
</div>
<Layout.Footer>
<Footer />
</Layout.Footer>
{children}
</div>
<Layout.Footer>
<Footer />
</Layout.Footer>
</div>
</Layout.Content>
</Layout>
</>
</div>
</Layout.Content>
</Layout>
</>
}
</Layout >
)

53
web/client/src/layout/index.jsx

@ -25,9 +25,6 @@ const Root = props => {
const [outerRoutes, setOuterRoutes] = useState([])
const [combineRoutes, setCombineRoutes] = useState([])
const [innnerRoutes, setInnerRoutes] = useState([])
const [authCrossLoading, setAuthCrossLoading] = useState(true)
const [microAppWaiting, setMicroAppWaiting] = useState(true)
const [resourceRoot, setResourceRoot] = useState({})
const flatRoutes = (routes) => {
const combineRoutes = [];
@ -130,7 +127,6 @@ const Root = props => {
store.dispatch(resize(document.getElementById('PomsApp').clientHeight, document.getElementById('PomsApp').clientWidth));
store.dispatch(actions.auth.initAuth());
const resourceRoot = await store.dispatch(initApiRoot())
setResourceRoot(resourceRoot.payload)
store.dispatch(initWebSocket({}))
const combineRoutes = flatRoutes(innerRoutes);
@ -153,46 +149,6 @@ const Root = props => {
component={route.component}
/>
)))
// IOT system cross
window.addEventListener('message', async function (e) { // message
const { data, origin } = e
if (origin == 'https://open.ys7.com') return
if (data && data.action) {
if (data.action == 'initUser') {
await store.dispatch(actions.auth.initAuth(data.user))
} else if (data.action == 'logout') {
await store.dispatch(actions.auth.logout())
}
}
setAuthCrossLoading(false)
});
// setAuthCrossLoading(false)
// MicroApp
const microAppListen = async (data) => {
if (data.action == 'initMicro') {
await store.dispatch(actions.auth.initAuth({
authorized: true,
// token: data.data.token,
// mirrorId: data.data.mirrorId
...(data.data || {})
}))
// await store.dispatch(push('/noMatch'));
setMicroAppWaiting(false)
}
}
if (window.__MICRO_APP_ENVIRONMENT__) {
console.info('MicroApp')
setAuthCrossLoading(false)
window.microApp.addDataListener(microAppListen, true)
} else {
console.info('NOT MicroApp')
setMicroAppWaiting(false)
}
// setMicroAppWaiting(false)
}, [])
return (
@ -209,8 +165,6 @@ const Root = props => {
<Layout
history={history}
routes={innnerRoutes}
authCrossLoading={authCrossLoading}
microAppWaiting={microAppWaiting}
>
{combineRoutes}
</Layout>
@ -226,13 +180,6 @@ const Root = props => {
</ConfigProvider>
: ''
}
{
resourceRoot.iotAuthWeb ?
<iframe id="iotAuth" src={`${resourceRoot.iotAuthWeb}/cross`} style={{ position: 'absolute', top: 0, height: 1, visibility: 'hidden' }} frameBorder={0} >
<p>你的浏览器不支持 iframe</p>
</iframe>
: ''
}
</>
)

28
web/client/src/sections/auth/actions/auth.js

@ -4,10 +4,10 @@ import { ApiTable, AxyRequest } from '$utils'
export const INIT_AUTH = 'INIT_AUTH';
export function initAuth (userData) {
const sessionUser = JSON.parse(sessionStorage.getItem('vcmpUser'))
const sessionUser = JSON.parse(sessionStorage.getItem('pomsUser'))
const user = userData || sessionUser || {};
if (user.authorized && !sessionUser) {
sessionStorage.setItem('vcmpUser', JSON.stringify(user))
sessionStorage.setItem('pomsUser', JSON.stringify(user))
}
return {
type: INIT_AUTH,
@ -32,19 +32,19 @@ export function login (username, password) {
return Promise.resolve();
}
// return dispatch({
// type: LOGIN_SUCCESS,
// payload: {
// user: {
// authorized: true,
// namePresent: 'TEST'
// }
// },
// });
return dispatch({
type: LOGIN_SUCCESS,
payload: {
user: {
authorized: true,
namePresent: 'TEST'
}
},
});
return AxyRequest.post(ApiTable.login, { username, password, domain: 'anxinyun' })
.then(user => {
sessionStorage.setItem('vcmpUser', JSON.stringify(user));
sessionStorage.setItem('pomsUser', JSON.stringify(user));
return dispatch({
type: LOGIN_SUCCESS,
payload: { user: user },
@ -63,12 +63,12 @@ export function login (username, password) {
export const LOGOUT = 'LOGOUT';
export function logout () {
const user = JSON.parse(sessionStorage.getItem('vcmpUser'))
const user = JSON.parse(sessionStorage.getItem('pomsUser'))
user && user.token ?
AxyRequest.post(ApiTable.logout, {
token: user.token
}) : null;
sessionStorage.removeItem('vcmpUser');
sessionStorage.removeItem('pomsUser');
return {
type: LOGOUT
};

2
web/client/src/sections/auth/containers/login.jsx

@ -20,8 +20,6 @@ const Login = props => {
useEffect(() => {
if (user && user.authorized) {
const iotAuth = document.getElementById('iotAuth').contentWindow;
iotAuth.postMessage({ action: 'login', user: user }, '*');
dispatch(push('/equipmentWarehouse/nvr'));
localStorage.setItem('vcmp_selected_sider', JSON.stringify(['nvr']))
localStorage.setItem('vcmp_open_sider', JSON.stringify(['equipmentWarehouse']))

3
web/client/src/sections/noMatch/containers/noMatch.jsx

@ -12,7 +12,7 @@ const NoMatch = (props) => {
<p style={{ fontSize: 32, lineHeight: 2 }}>PAGE NOT FOUND</p>
<p>很遗憾您暂时无法访问该页面</p>
<p>请检查您访问的链接地址是否正确</p>
<p style={{ marginTop: 80 }}>Copyright © {moment().year()} 飞尚尚视</p>
<p style={{ marginTop: 80 }}>Copyright © {moment().year()} 飞尚运维服务</p>
</div>
</div>
)
@ -21,6 +21,7 @@ const NoMatch = (props) => {
function mapStateToProps (state) {
const { } = state;
return {
};
}

25
web/client/src/utils/func.js

@ -2,32 +2,9 @@
export const isAuthorized = (authcode) => {
if (JSON.parse(sessionStorage.getItem('user'))) {
const { resources } = JSON.parse(sessionStorage.getItem('vcmpUser'));
const { resources } = JSON.parse(sessionStorage.getItem('pomsUser'));
return resources.includes(authcode);
} else {
return false;
}
}
export const checkAudioVideo = (constraintsData) => {
if (navigator.mediaDevices === undefined) {
navigator.mediaDevices = {};
}
if (navigator.mediaDevices.getUserMedia === undefined) {
navigator.mediaDevices.getUserMedia = function (constraints) {
// 首先,如果有getUserMedia的话,就获得它
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
// 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
if (!getUserMedia) {
return Promise.reject({ code: 404 });
}
// 否则,为老的navigator.getUserMedia方法包裹一个Promise
return new Promise(function (resolve, reject) {
getUserMedia.call(navigator, constraints, resolve, reject);
});
}
}
return navigator.mediaDevices.getUserMedia(constraintsData)
}

11
web/client/src/utils/index.js

@ -1,19 +1,18 @@
'use strict';
import { isAuthorized, checkAudioVideo } from './func';
import { isAuthorized } from './func';
import { AuthorizationCode } from './authCode';
import {
ApiTable,RouteTable,
AuthRequest, AxyRequest,
basicAction,RouteRequest
ApiTable, RouteTable,
AxyRequest,
basicAction, RouteRequest
} from './webapi'
export {
isAuthorized,
checkAudioVideo,
AuthorizationCode,
RouteTable,
ApiTable,
AuthRequest,
AxyRequest,
basicAction,
RouteRequest,

4
web/client/src/utils/webapi.js

@ -1,11 +1,10 @@
"use strict";
import { ProxyRequest, customWebUtils } from "@peace/utils";
export const AuthRequest = new ProxyRequest("_auth");
export const AxyRequest = new ProxyRequest("_axy");
export const webUtils = new customWebUtils({
userKey: 'vcmpUser'
userKey: 'pomsUser'
});
const { basicAction, RouteRequest } = webUtils
export {
@ -15,7 +14,6 @@ export {
export const ApiTable = {
login: "login",
logout: "logout",
};
export const RouteTable = {
apiRoot: "/api/root",

35
web/config.js

@ -12,22 +12,16 @@ dev && console.log('\x1B[33m%s\x1b[0m', '请遵循并及时更新 readme.md,
// // 启动参数
args.option(['p', 'port'], '启动端口');
args.option(['u', 'api-url'], 'webapi的URL');
args.option('apiVcmpUrl', 'webapi的URL 外网可访问');
args.option('apiAuthUrl', 'IOT 鉴权 api');
args.option('apiPomsUrl', 'webapi的URL 外网可访问');
args.option('apiAnxinyunUrl', '安心云 api');
args.option('iotAuthWeb', 'IOT 鉴权 web');
args.option('iotVideoServer', 'IOT 后端视频服务鉴权');
const flags = args.parse(process.argv);
const API_URL = process.env.API_URL || flags.apiUrl;
const API_VCMP_URL = process.env.API_VCMP_URL || flags.apiVcmpUrl;
const API_AUTH_URL = process.env.API_AUTH_URL || flags.apiAuthUrl;
const IOT_AUTH_WEB = process.env.IOT_AUTH_WEB || flags.iotAuthWeb;
const API_POMS_URL = process.env.API_POMS_URL || flags.apiPomsUrl;
const API_ANXINYUN_URL = process.env.API_ANXINYUN_URL || flags.apiAnxinyunUrl;
const IOT_VIDEO_SERVER = process.env.IOT_VIDEO_SERVER || flags.iotVideoServer;
if (!API_URL || !API_ANXINYUN_URL || !API_AUTH_URL || !IOT_AUTH_WEB || !IOT_VIDEO_SERVER) {
if (!API_URL || !API_ANXINYUN_URL) {
console.log('缺少启动参数,异常退出');
args.showHelp();
process.exit(-1);
@ -42,37 +36,16 @@ const product = {
host: API_URL,
match: /^\/_api\//,
}
}, {
entry: require('./middlewares/proxy').entry,
opts: {
host: API_AUTH_URL,
match: /^\/_auth\//,
}
}, {
entry: require('./middlewares/proxy').entry,
opts: {
host: API_ANXINYUN_URL,
match: /^\/_axy\//,
}
}, {
entry: require('./middlewares/proxy').entry,
opts: {
host: IOT_VIDEO_SERVER,
match: /^\/_vs\//,
}
},{
// TODO 还不能用
entry: require('./middlewares/proxy').entry,
opts: {
host: 'https://open.ys7.com',
match: /^\/_yingshi\//,
}
}, {
entry: require('./routes').entry,
opts: {
apiUrl: API_VCMP_URL,
iotAuthWeb: IOT_AUTH_WEB,
iotVideoServer: IOT_VIDEO_SERVER,
apiUrl: API_POMS_URL,
staticRoot: './client',
}
}, {

4
web/middlewares/vite-dev.js

@ -19,7 +19,7 @@ module.exports = {
// 因为 Vite 自会接管
})
server.listen(5002)
console.info('vite server.listen 5002');
server.listen(5602)
console.info('vite server.listen 5602');
}
};

8
web/middlewares/webpack-dev.js

@ -10,7 +10,7 @@ const compiler = webpack(devConfig);
module.exports = {
entry: function (app, router, opts) {
app.use(proxy('http://localhost:5001', {
app.use(proxy('http://localhost:5601', {
filter: function (ctx) {
return /\/build/.test(url.parse(ctx.url).path);
},
@ -19,7 +19,7 @@ module.exports = {
}
}));
app.use(proxy('http://localhost:5001', {
app.use(proxy('http://localhost:5601', {
filter: function (ctx) {
return /\/$/.test(url.parse(ctx.url).path);
},
@ -46,11 +46,11 @@ module.exports = {
});
server.use(middleware(compiler));
server.listen('5001', function (err) {
server.listen('5601', function (err) {
if (err) {
console.error(err);
} else {
console.info(`webpack-dev listen 5001`);
console.info(`webpack-dev listen 5601`);
}
})
}

2
web/package.json

@ -7,7 +7,7 @@
"test": "mocha",
"start-vite": "cross-env NODE_ENV=developmentVite npm run start-params",
"start": "cross-env NODE_ENV=development npm run start-params",
"start-params": "node server -p 5000 -u http://localhost:4000 --apiVcmpUrl http://localhost:4000 --apiAuthUrl http://localhost:4200 --apiAnxinyunUrl http://localhost:4100 --iotAuthWeb http://localhost:5200 --iotVideoServer http://221.230.55.27:8081",
"start-params": "node server -p 5600 -u http://localhost:4600 --apiPomsUrl http://localhost:4600 --apiAnxinyunUrl http://localhost:4100",
"deploy": "export NODE_ENV=production&& npm run build && node server",
"build-dev": "cross-env NODE_ENV=development&&webpack --config webpack.config.js",
"build": "cross-env NODE_ENV=production&&webpack --config webpack.config.prod.js"

2
web/webpack.config.js

@ -36,7 +36,7 @@ module.exports = {
plugins: [
new webpack.HotModuleReplacementPlugin(),
new BundleAnalyzerPlugin({
analyzerPort: 8000,
analyzerPort: 8600,
}),
new SemiWebpackPlugin({
theme: {

Loading…
Cancel
Save