Commit c66ea3c2 by 赖慧粮

feat(config): 集成配置中心 & 统一全局变量名 & 统一工程命令

parent adcb3d6c
......@@ -3,8 +3,8 @@
import { get, post } from '@/api/request'
import CONFIG from '@/config'
const { env, privateDomain } = CONFIG
const flag = env || CONFIG.private
const { privateDomain } = CONFIG
const flag = process.env.X_CA_STAGE || process.env.IS_PRIVATE
// 获取地址列表
export const getAddressList = data =>
......
......@@ -2,14 +2,14 @@
/*
1# 模块分割命名请使用与模块内容较为贴近的命名,模块每个请求必须添加注释以说明用途
2# 键命名规则(建议拼接对应关键词)
查询/获取信息getxxx 新增addxxx 删除removexxx 修改/编辑/保存setxxx
查询/获取信息getxxx 新增addxxx 删除removexxx 修改/编辑/保存setxxx
3# 注意post和get传递的参数不同
4# 业务模块需要哪个接口则引入哪个
*/
import { get, post } from '@/api/request'
import CONFIG from '@/config'
const { env, privateDomain, noGateDomain, goDomain } = CONFIG
const flag = env || CONFIG.private
const { privateDomain, goDomain } = CONFIG
const flag = process.env.X_CA_STAGE || process.env.IS_PRIVATE
// 获取dms sub_key
export const getDmsInfo = data =>
......@@ -18,8 +18,8 @@ export const getDmsInfo = data =>
// 获取用户信息
export const getUserInfo = data =>
flag
? get('/picText/live/Content/getUserInfo', { data })
: get('/live/live/pictext/getUserInfo', { data, baseURL: noGateDomain })
? get('/Program/Index/getUserInfo', { data })
: get('/Program/Index/getUserInfo', { data, baseURL: privateDomain })
// pv 统计
export const setPvInfo = data =>
......
/* eslint-disable no-confusing-arrow */
import { post, get } from '@/api/request'
import CONFIG from '@/config'
const { env, activityDomain } = CONFIG
const flag = env || CONFIG.private
const { activityDomain } = CONFIG
const flag = process.env.X_CA_STAGE || process.env.IS_PRIVATE
// 获取抽奖(场次)列表
export const getLotterySessionList = data =>
......
......@@ -2,8 +2,8 @@
import { post, get } from '@/api/request'
import CONFIG from '@/config'
const { env, activityDomain } = CONFIG
const flag = env || CONFIG.private
const { activityDomain } = CONFIG
const flag = process.env.X_CA_STAGE || process.env.IS_PRIVATE
// 获取个人抽奖记录
export const getRecordList = data =>
......
......@@ -2,8 +2,8 @@
import { get } from '@/api/request'
import CONFIG from '@/config'
const { env, activityDomain } = CONFIG
const flag = env || CONFIG.private
const { activityDomain } = CONFIG
const flag = process.env.X_CA_STAGE || process.env.IS_PRIVATE
// 获取留言抽奖中奖名单
export const getWinnersList = data =>
......
......@@ -4,15 +4,6 @@ import qs from "qs";
import VueCookie from "vue-cookie";
// message消息弹窗,可自行引入其他插件
import { Toast } from "vant";
// 全局配置文件
import CONFIG from "@/config";
const { env, armsPid } = CONFIG;
const arms = process.client && !CONFIG.private ? require('@/utils/arms') : null
const logger = arms && arms(armsPid, true);
// 环境变量
// 创建axios实例,不污染axios全局
const axiosService = axios.create();
......@@ -20,14 +11,14 @@ const axiosService = axios.create();
// 默认content-type
axiosService.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";
// 默认baseURL
axiosService.defaults.baseURL = CONFIG.defDomain;
axiosService.defaults.baseURL = `//${process.env.CUSTOMER_API_DOMAIN}/v1`;
// 默认请求超时时间
axiosService.defaults.timeout = 3 * 1000;
// 请求拦截器
axiosService.interceptors.request.use(
config => {
const token = VueCookie.get(CONFIG.tokenKey);
const token = VueCookie.get(process.env.CUSTOMER_TOKEN_KEY);
const { method, headers } = config;
const data = filterNull(config.data);
// 格式化序列,目前只对post进行处理,可新增其他请求逻辑
......@@ -47,9 +38,8 @@ axiosService.interceptors.request.use(
config.headers.token = token;
}
// 自定义header键:X-Ca-Stage(环境变量)
if (env) {
config.headers["X-Ca-Stage"] = env;
}
config.headers["X-Ca-Stage"] = process.env.X_CA_STAGE;
config.metadata = { startTime: new Date() };
return config;
},
......@@ -65,19 +55,17 @@ axiosService.interceptors.response.use(
// 否则的话抛出错误
response.config.metadata.endTime = new Date();
response.duration = (response.config?.metadata?.endTime || 0) - (response.config?.metadata?.startTime || 0);
const { status, statusText, duration, data, config } = response;
const { status, data } = response;
if (status === 200) {
// console.log(data && data.errorCode === 0 && data.code === 200);
if (data && data.errorCode === 0 && data.code === 200) {
// success
} else {
// failed
logger && logger.api(config.url, true, duration, data.errorCode, data.errorMessage);
}
return Promise.resolve(response.data);
} else {
// failed
logger && logger.api(config.url, false, duration, status, statusText);
errorHandle(502);
return Promise.reject(response);
}
......@@ -85,13 +73,10 @@ axiosService.interceptors.response.use(
error => {
error.config.metadata.endTime = new Date();
error.duration = (error.config?.metadata?.endTime || 0) - (error.config?.metadata?.startTime || 0);
const { message, duration, config } = error;
const { message } = error;
if (message.includes("timeout")) {
// url, false, time, res.data.Flag, res.data.FlagString
logger && logger.api(config.url, false, duration, "NetworkTimeout", message);
errorHandle(408);
} else {
logger && logger.api(config.url, false, duration, "NetworkError", message);
errorHandle(504);
}
return Promise.reject(error);
......
......@@ -3,7 +3,6 @@
</template>
<script>
import CONFIG from '@/config'
import { mapGetters, mapActions } from 'vuex'
import { CUSTOM_SOURCE_TYPE } from '@/utils/constant'
......@@ -66,7 +65,7 @@ export default {
company: '管理员',
pageId: id,
pageType: CUSTOM_SOURCE_TYPE.vote,
env: CONFIG.env,
env: process.env.X_CA_STAGE,
beforeShow: next => {
if (this.isLogin) {
next()
......@@ -100,7 +99,7 @@ export default {
this.body.addEventListener('touchmove', this.dealScrollOn)
})
this.body.addEventListener('touchend', () => {
this.body.removeEventListener('touchmove', this.dealScrollOn)
this.dealScrollOff()
})
......
const packageEnv = require('./package.json')
const protocol = process.client && window.location.protocol
const isHttps = protocol === 'https:'
export default {
defDomain: isHttps ? process.env.API_DOMAIN.replace('8680', '843') : process.env.API_DOMAIN,
noGateDomain: '//1812501212048408.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/gdyactivity.online',
goDomain: '//golivec.guangdianyun.tv/v1',
privateDomain: '//privateapi.guangdianyun.tv/v1',
activityDomain: '//activity.guangdianyun.tv/v1',
defBanner: `${process.env.OSS_DOMAIN}/common/img/lottery_banner_default_v2.png`,
defShareImg: `${protocol || 'https:'}${process.env.OSS_DOMAIN}/common/img/lottery.png`, // 必须带协议头,否则微信分享配置时无法生效
env: process.env.X_CA_STAGE,
private: process.env.private,
ossImageServe: process.env.private ? '' : '?x-oss-process=style/mobilebackground',
tokenKey: 'token'
goDomain: `//${process.env.GO_API_DOMAIN}/v1`,
privateDomain: `//${process.env.PRIVATE_API_DOMAIN}/v1`,
activityDomain: `//${process.env.ACTIVITY_API_DOMAIN}/v1`,
defBanner: `//${process.env.OSS_DOMAIN}/common/img/lottery_banner_default_v2.png`,
defShareImg: `${protocol || 'https:'}//${process.env.OSS_DOMAIN}/common/img/lottery.png`, // 必须带协议头,否则微信分享配置时无法生效
ossImageServe: process.env.IS_PRIVATE ? '' : '?x-oss-process=style/mobilebackground',
}
/* sentry */
export const sentryOptions = {
dsn: `${protocol}//610a9f4b831d4d10b228658886eaa18d@sentry.guangdianyun.tv/14`,
version: packageEnv.version,
env: process.env.X_CA_STAGE,
name: packageEnv.name,
isAjax: false,
isError: false,
}
/* 谷歌统计 */
export const GTAG_ID = 'G-HZHJLDPT80'
// arms
export const armsPid = 'huh7k89btk@1db1146a1ca55ff'
/* 正式:私有化部署(private)环境变量 */
module.exports = {
X_CA_STAGE: '',
API_DOMAIN: '//cgateway.cbnbn.cn/v1',
OSS_DOMAIN: '//static.cbnbn.cn',
ROP_DOMAIN: 'cbnbn.cn',
private: true,
privateType: 'cbn'
}
/* 正式:私有化部署(private)环境变量 */
module.exports = {
X_CA_STAGE: '',
API_DOMAIN: '//cgateway.cbnclouds.cn/v1',
OSS_DOMAIN: '//gd-resource.cbnclouds.cn',
ROP_DOMAIN: 'cbnclouds.cn',
private: true,
privateType: 'cbnclouds',
run_port: 4002,
}
/* 正式:私有化部署(private)环境变量 */
module.exports = {
X_CA_STAGE: '',
API_DOMAIN: '//cgateway.hemeiyun.net:8680/v1',
OSS_DOMAIN: '//eos-wuxi-1.cmecloud.cn/g-resource',
ROP_DOMAIN: 'hemeiyun.net',
private: true,
privateType: 'cm'
}
/* 测试(dev)环境变量 */
module.exports = {
NODE_ENV: 'production',
X_CA_STAGE: 'TEST',
private: false,
run_server: 'development'
}
/* 写在该文件下的所有配置在所有环境下都会设置 且值可被覆盖 */
module.exports = {
baseUrl: '/lottery/',
API_DOMAIN: '//apiliveroom.dev.guangdianyun.tv/v1',
OSS_DOMAIN: '//static-pro.guangdianyun.tv',
ROP_DOMAIN: 'aodianyun.com',
X_CA_STAGE: 'TEST',
TOKEN_KEY: 'token',
private: false,
run_port: 4002,
}
/* 正式:私有化部署(private)环境变量 */
module.exports = {
X_CA_STAGE: '',
API_DOMAIN: '//cgateway.huaguangyun.cn/v1',
OSS_DOMAIN: '//g-resource.obs.cn-north-4.myhuaweicloud.com',
ROP_DOMAIN: 'huaguangyun.cn',
private: true,
privateType: 'huawei',
run_port: 34002,
}
/* 灰度(pre)环境变量 */
module.exports = {
NODE_ENV: 'production',
X_CA_STAGE: 'PRE',
private: false,
run_server: 'preview'
}
/* 正式(prod)环境变量 */
module.exports = {
NODE_ENV: 'production',
X_CA_STAGE: '',
private: false,
run_server: 'production'
}
/* 正式:私有化部署(private)环境变量 */
module.exports = {
X_CA_STAGE: '',
API_DOMAIN: '//cgateway.vvku.com/v1',
OSS_DOMAIN: '//static.vvku.com',
ROP_DOMAIN: 'vvku.com',
private: true,
privateType: 'vvku'
}
/* eslint-disable nuxt/no-cjs-in-config */
const path = require('path')
/* env configs */
const globalEnvConfig = require(`./config/global.js`)
const envConfig = require(`./config/${process.env.mode || 'production'}.js`)
const env = Object.assign(globalEnvConfig, envConfig)
/* ali-oss */
const WebpackAliOSSPlugin = require('@gdyfe/webpack-alioss-plugin')
const { getEnvConfig } = require('@gdyfe/config')
const { version, name } = require('./package.json')
const env = getEnvConfig({
server: process.env.mode,
ic: 'ZmUtZ5WNp%XBzDw=',
})
/* version from package.json */
const { version } = require('./package.json')
const { X_CA_STAGE, RUN_SERVER, IS_PRIVATE, STATIC_SOURCE_DOMAIN, STATIC_OSS_ACCESS, OSS_DOMAIN } = env;
const { SERVE_PORT, BASE_URL, PROJECT_NAME, SENTRY_DSN, GTAG_ID } = env.lottery;
const PROJECT_NAME = 'lottery'
const IS_USE_OSS = process.env.NODE_ENV === 'production' && !env.private
const IS_USE_OSS = process.env.NODE_ENV === 'production' && !IS_PRIVATE
const plugins = IS_USE_OSS
? [
// 优化打包速度
new WebpackAliOSSPlugin({
accessKeyId: 'LTAI5tDdsn3rPhNSkED4jDDz',
accessKeySecret: 'rsWsmunIglT1NqYUNe8fvbjl02UqTk',
region: 'oss-cn-hangzhou',
bucket: `guangdianyun-static-${env.run_server}`,
accessKeyId: STATIC_OSS_ACCESS.accessKeyId,
accessKeySecret: STATIC_OSS_ACCESS.accessKeySecret,
region: STATIC_OSS_ACCESS.region,
bucket: STATIC_OSS_ACCESS.bucket,
prefix: PROJECT_NAME,
limit: 10, // 备份最近 10 个版本的 oss 文件
format: version,
......@@ -32,14 +31,14 @@ const plugins = IS_USE_OSS
})
]
: []
const REMOTE_OSS_DOMAIN = `//static-${env.run_server}.guangdianyun.tv`
const sentryConfig = IS_USE_OSS
? {
sentry: {
dsn: 'https://610a9f4b831d4d10b228658886eaa18d@sentry.guangdianyun.tv/14',
dsn: SENTRY_DSN,
config: {
environment: env.run_server,
name,
environment: RUN_SERVER,
release: version,
autoSessionTracking: false
},
......@@ -51,7 +50,7 @@ const sentryConfig = IS_USE_OSS
const gtagConfig = IS_USE_OSS
? {
'google-gtag': {
id: 'G-HZHJLDPT80', // required
id: GTAG_ID, // required
config: {
anonymize_ip: true,
send_page_view: false
......@@ -64,7 +63,7 @@ export default {
buildDir: 'nuxt-dist',
env,
router: {
base: globalEnvConfig.baseUrl,
base: BASE_URL,
middleware: ['device'],
extendRoutes(routes, resolve) {
routes.push({
......@@ -100,11 +99,11 @@ export default {
link: [
{
rel: 'stylesheet',
href: `${env.OSS_DOMAIN}/common/icon/iconfont.css`,
href: `//${OSS_DOMAIN}/common/icon/iconfont.css`,
ssr: false
},
{ rel: 'icon', href: `${env.OSS_DOMAIN}/common/img/gdy_favicon.png` },
{ rel: 'stylesheet', href: `${REMOTE_OSS_DOMAIN}/web-component/complaintsDeal/complaintsDeal.min.css` },
{ rel: 'icon', href: `//${OSS_DOMAIN}/common/img/gdy_favicon.png` },
{ rel: 'stylesheet', href: `//${STATIC_SOURCE_DOMAIN}/web-component/complaintsDeal/complaintsDeal.min.css` },
{
href: '//apiliveroom.dev.guangdianyun.tv/v1',
rel: 'dns-prefetch'
......@@ -126,7 +125,7 @@ export default {
rel: 'dns-prefetch'
}
],
script: [{ src: `${REMOTE_OSS_DOMAIN}/web-component/complaintsDeal/complaintsDeal.min.js`, defer: true }]
script: [{ src: `//${STATIC_SOURCE_DOMAIN}/web-component/complaintsDeal/complaintsDeal.min.js`, defer: true }]
},
// Global CSS: https://go.nuxtjs.dev/config-css
......@@ -167,14 +166,14 @@ export default {
axios: {},
server: {
https: !process.env.NODE_ENV === 'production',
port: env.run_port, // default: 3000
port: SERVE_PORT, // default: 3000
host: '0.0.0.0' // default: localhost
},
// Build Configuration: https://go.nuxtjs.dev/config-build
build: {
publicPath: !env.private
? `${REMOTE_OSS_DOMAIN}/${PROJECT_NAME}/${version}`
: `/${env.X_CA_STAGE.toLowerCase() || 'prod'}/`,
publicPath: !IS_PRIVATE
? `//${STATIC_SOURCE_DOMAIN}/${PROJECT_NAME}/${version}`
: `/${X_CA_STAGE.toLowerCase() || 'prod'}/`,
transpile: [/vant.*?less/],
babel: {
plugins: [
......
......@@ -4,41 +4,38 @@
"private": true,
"license": "UNLICENSED",
"scripts": {
"serve": "cross-env mode=dev nuxt",
"serve:dev": "cross-env mode=dev nuxt",
"serve:pre": "cross-env mode=pre nuxt",
"serve:dev": "cross-env mode=test nuxt",
"serve:pre": "cross-env mode=preview nuxt",
"serve:prod": "cross-env mode=production nuxt",
"serve:cm": "cross-env mode=cm.private nuxt",
"serve:vvku": "cross-env mode=vvku.private nuxt",
"serve:cbn": "cross-env mode=cbn.private nuxt",
"serve:huawei": "cross-env mode=huawei.private nuxt",
"serve:cbnclouds": "cross-env mode=cbnclouds.private nuxt",
"build": "cross-env mode=dev nuxt build",
"build:dev": "cross-env mode=dev nuxt build",
"build:pre": "cross-env mode=pre nuxt build",
"serve:cm": "cross-env mode=cm nuxt",
"serve:vvku": "cross-env mode=vvku nuxt",
"serve:cbn": "cross-env mode=cbn nuxt",
"serve:huawei": "cross-env mode=huawei nuxt",
"serve:cbnclouds": "cross-env mode=cbnclouds nuxt",
"build:dev": "cross-env mode=test nuxt build",
"build:pre": "cross-env mode=preview nuxt build",
"build:prod": "cross-env mode=production nuxt build",
"build:cm": "cross-env mode=cm.private nuxt build",
"build:vvku": "cross-env mode=vvku.private nuxt build",
"build:cbn": "cross-env mode=cbn.private nuxt build",
"build:huawei": "cross-env mode=huawei.private nuxt build",
"build:cbnclouds": "cross-env mode=cbnclouds.private nuxt build",
"start": "cross-env mode=dev nuxt start",
"start:dev": "cross-env mode=dev nuxt start",
"start:pre": "cross-env mode=pre nuxt start",
"build:cm": "cross-env mode=cm nuxt build",
"build:vvku": "cross-env mode=vvku nuxt build",
"build:cbn": "cross-env mode=cbn nuxt build",
"build:huawei": "cross-env mode=huawei nuxt build",
"build:cbnclouds": "cross-env mode=cbnclouds nuxt build",
"start:dev": "cross-env mode=test nuxt start",
"start:pre": "cross-env mode=preview nuxt start",
"start:prod": "cross-env mode=production nuxt start",
"start:cm": "cross-env mode=cm.private nuxt start",
"start:vvku": "cross-env mode=vvku.private nuxt start",
"start:cbn": "cross-env mode=cbn.private nuxt start",
"start:huawei": "cross-env mode=huawei.private nuxt start",
"start:cbnclouds": "cross-env mode=cbnclouds.private nuxt start",
"pm2:dev": "pm2 start pm2.json --only lottery_test",
"pm2:pre": "pm2 start pm2.json --only lottery_pre",
"pm2": "pm2 start pm2.json --only lottery",
"pm2:cm": "pm2 start pm2.json --only lottery_cm",
"pm2:vvku": "pm2 start pm2.json --only lottery_vvku",
"pm2:cbn": "pm2 start pm2.json --only lottery_cbn",
"pm2:huawei": "pm2 start pm2.json --only lottery_huawei",
"pm2:cbnclouds": "pm2 start pm2.json --only lottery_cbnclouds",
"start:cm": "cross-env mode=cm nuxt start",
"start:vvku": "cross-env mode=vvku nuxt start",
"start:cbn": "cross-env mode=cbn nuxt start",
"start:huawei": "cross-env mode=huawei nuxt start",
"start:cbnclouds": "cross-env mode=cbnclouds nuxt start",
"pm2:dev": "pm2 start pm2.json --only lottery-test",
"pm2:pre": "pm2 start pm2.json --only lottery-pre",
"pm2:prod": "pm2 start pm2.json --only lottery-prod",
"pm2:cm": "pm2 start pm2.json --only lottery-cm",
"pm2:vvku": "pm2 start pm2.json --only lottery-vvku",
"pm2:cbn": "pm2 start pm2.json --only lottery-cbn",
"pm2:huawei": "pm2 start pm2.json --only lottery-huawei",
"pm2:cbnclouds": "pm2 start pm2.json --only lottery-cbnclouds",
"generate": "nuxt generate",
"lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .",
"lint:style": "stylelint \"**/*.{vue,css}\" --ignore-path .gitignore",
......@@ -46,6 +43,7 @@
},
"dependencies": {
"@easy-messenger/client-connection": "^1.0.3",
"@gdyfe/config": "latest",
"@gdyfe/gdy-component-lib": "^0.4.1",
"@gdyfe/rop-client": "1.1.10",
"@nuxtjs/axios": "^5.13.6",
......
import Vue from "vue";
import VueGtag from "vue-gtag"; // 谷歌统计
import { GTAG_ID } from "@/config";
if (process.env.NODE_ENV === "production" && !process.env.private) {
Vue.use(VueGtag, {
config: {
id: GTAG_ID,
params: {
anonymize_ip: true,
send_page_view: false,
},
},
});
}
import Report from "gdy-report";
import { sentryOptions } from "@/config";
import Vue from "vue";
/* 初始化 */
if (process.env.NODE_ENV === "production" && !process.env.private) {
Report(sentryOptions);
}
Vue.prototype.$report = Report;
\ No newline at end of file
{
"apps": [
{
"name": "lottery_test",
"script": "npm",
"name": "lottery-test",
"script": "yarn",
"args": "run start:dev",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "4G",
"env": {
"port": 4002,
"mode": "test",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log" // 正常日志文件
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery_pre",
"script": "npm",
"name": "lottery-pre",
"script": "yarn",
"args": "run start:pre",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "4G",
"env": {
"port": 4002,
"mode": "preview",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log" // 正常日志文件
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery",
"script": "npm",
"name": "lottery-prod",
"script": "yarn",
"args": "run start:prod",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "8G",
"env": {
"port": 4002,
"mode": "production",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log" // 正常日志文件
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery_cm",
"script": "npm",
"name": "lottery-cm",
"script": "yarn",
"args": "run start:cm",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "8G",
"env": {
"port": 4002,
"mode": "cm",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery_vvku",
"script": "npm",
"name": "lottery-vvku",
"script": "yarn",
"args": "run start:vvku",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "8G",
"env": {
"port": 4002,
"mode": "vvku",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery_cbn",
"script": "npm",
"name": "lottery-cbn",
"script": "yarn",
"args": "run start:cbn",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "8G",
"env": {
"port": 4002,
"mode": "cbn",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery_huawei",
"script": "npm",
"name": "lottery-huawei",
"script": "yarn",
"args": "run start:huawei",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "8G",
"env": {
"port": 34002,
"mode": "huawei",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log"
},
{
"name": "lottery_cbnclouds",
"script": "npm",
"name": "lottery-cbnclouds",
"script": "yarn",
"args": "run start:cbnclouds",
"instances": "max",
"exec_mode": "cluster",
"autorestart": true,
"max_memory_restart": "32G",
"env": {
"port": 4002,
"mode": "cbnclouds",
"NODE_ENV": "production"
},
"error_file": "./logs/app-err.log",
......
#!/bin/sh
/etc/init.d/zabbix_agentd start
yarn run pm2
yarn run pm2:prod
while true
do
......
/**
* @file aliyun arms report method of commonJS
* @since 1.0.8
* @author whzcorcd <whzcorcd@gmail.com>
*
* 阿里前端监控
* 配置文档 https://www.npmjs.com/package/alife-logger
*
* 使用示例:const arms = require('arms')
* const logger = arms('huh7k89btk@39bb266d318880a', true, true)
* logger && logger.api(url, true, time, res.data.Flag, res.data.FlagString)
* 示例解析:arms(应用 pid, 是否关闭 API 自动上报, 是否启用 SPA 分析)
* api(请求地址,请求成功与否,请求耗时,请求状态码,请求返回 Msg)
*/
const BrowerLogger = require('alife-logger')
const __bl = (pid, disableHook = false, enableSPA = true) => {
try {
return BrowerLogger.singleton({
pid,
appType: 'web',
imgUrl: 'https://arms-retcode.aliyuncs.com/r.png?',
sendResource: true,
enableLinkTrace: true,
behavior: true,
disableHook,
useFmp: true,
enableSPA
})
} catch (e) {
// eslint-disable-next-line no-console
console.error('init logger fail', e)
return false
}
}
module.exports = process.env.NODE_ENV === 'production' ? __bl : false
......@@ -58,7 +58,7 @@ class WxShare {
link: info?.link || window.location.href,
title: info?.title || '分享',
desc: info?.desc || window.location.href, // 副标题
imgUrl: info?.imgUrl || `${window.location.protocol}${process.env.OSS_DOMAIN}/common/img/shop_share.png`,
imgUrl: info?.imgUrl || `${window.location.protocol}//${process.env.OSS_DOMAIN}/common/img/shop_share.png`,
success: info?.success || function () {},
fail: info?.fail || function () {},
}
......
......@@ -964,6 +964,13 @@
dependencies:
"@fortawesome/fontawesome-common-types" "^0.2.35"
"@gdyfe/config@^1.0.5":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@gdyfe/config/-/config-1.0.5.tgz#94152ff432bc999411258c52050fdcf1a3686668"
integrity sha512-H4sXCmKUw5x33nMjW+UrDvY84spvUA/uMR6uygg6k5EIysKyKRlYb1dExXKnV1EolI7622clSh0iNwDpW5So6w==
dependencies:
node-rsa "^1.1.1"
"@gdyfe/gdy-component-lib@^0.4.1":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@gdyfe/gdy-component-lib/-/gdy-component-lib-0.4.1.tgz#05f60cb3a2542064730b104875633eae597630ca"
......@@ -2251,6 +2258,13 @@ asn1.js@^5.2.0:
minimalistic-assert "^1.0.0"
safer-buffer "^2.1.0"
asn1@^0.2.4:
version "0.2.6"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
dependencies:
safer-buffer "~2.1.0"
assert@^1.1.1:
version "1.5.0"
resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
......@@ -6481,6 +6495,13 @@ node-res@^5.0.1:
on-finished "^2.3.0"
vary "^1.1.2"
node-rsa@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/node-rsa/-/node-rsa-1.1.1.tgz#efd9ad382097782f506153398496f79e4464434d"
integrity sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==
dependencies:
asn1 "^0.2.4"
normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
......@@ -8363,7 +8384,7 @@ safe-regex@^2.1.1:
dependencies:
regexp-tree "~0.1.1"
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0:
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment