diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index e95cffd11..9756df5bb 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -17,6 +17,13 @@ const paths = require("./paths"); const publicPath = "/"; const env = getClientEnvironment("/","development"); +const process = require('process'); + +process.on('uncaughtException', function (err) { + // 开发时,websocket proxy 会因服务重新部署而报错中断本地 server,这里拦截一下 + console.log('拦截未处理异常:', err); +}); + module.exports = { optimization: { splitChunks: { @@ -273,12 +280,11 @@ module.exports = { reactPath:'react.production.min.js', }), new InterpolateHtmlPlugin(HtmlWebpackPlugin, env.raw), - // Add module names to factory functions so they appear in browser profiler. new webpack.NamedModulesPlugin(), // Makes some environment variables available to the JS code, for example: // if (process.env.NODE_ENV === 'development') { ... }. See `./env.js`. - new webpack.DefinePlugin(env.stringified), + new webpack.DefinePlugin({ ...env.stringified, __SERVER__: 'false',__CLIENT__: 'true' }), // This is necessary to emit hot updates (currently CSS only): new webpack.HotModuleReplacementPlugin(), // Watcher doesn't work well if you mistype casing in a path so we use diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index a7811c3a1..98c2f41b7 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -294,6 +294,7 @@ module.exports = { minifyURLs: true, }, }), + new webpack.DefinePlugin({ ...env.stringified, __SERVER__: 'false',__CLIENT__: 'true' }), new InterpolateHtmlPlugin(HtmlWebpackPlugin, env.raw), // Makes some environment variables available to the JS code, for example: // if (process.env.NODE_ENV === 'production') { ... }. See `./env.js`. diff --git a/src/common/UrlTool.js b/src/common/UrlTool.js index e45ae6ba2..17946963b 100644 --- a/src/common/UrlTool.js +++ b/src/common/UrlTool.js @@ -2,10 +2,14 @@ import React from "react"; import md5 from 'md5'; import {Input} from "antd"; const { Search } = Input; +import { url as ssrOrigin, host as ssrHost } from '../ssrUrl' -const $ = window.$; -const isDev = window.location.port == 3007; -const isdev2= window.location.hostname ==='www.educoder.net' + +if (!__SERVER__) { + const $ = window.$; +} +const isDev = __SERVER__ ? false : window.location.port == 3007; +const isdev2= __SERVER__ ? false : window.location.hostname ==='www.educoder.net' export const TEST_HOST = "https://testforgeplus.trustie.net" export function getImageUrl(path) { // https://www.educoder.net @@ -40,7 +44,7 @@ export function getImageUrlAbsolute(path) { // const local = 'http://localhost:3000' path && !path.startsWith('/') && !path.startsWith('http') && (path = '/'.concat(path)); const local = 'https://testforgeplus.trustie.net'; - const prod = window.location.origin; + const prod = __SERVER__ ? local : window.location.origin; if (isDev) { return `${local}${path}` }else{ @@ -198,7 +202,7 @@ function railsgettimess(proxy) { } }}) - window.setTimeout(function () { + setTimeout(function () { checkSubmitFlgs=false; }, 2500); } @@ -295,13 +299,13 @@ export function turnbar(str){ let s = str; if(s && s.length>0){ if(s.indexOf("%")>-1){ - s = s.replaceAll('%','_25'); + s = s.split('%').join('_25'); } if(s.indexOf("#")>-1){ - s = s.replaceAll('#','%23'); + s = s.split('#').join('%23'); } if(s.indexOf("/")>-1){ - s = s.replaceAll('/','%2F'); + s = s.split('/').join('%2F'); } } return s; @@ -310,13 +314,13 @@ export function returnbar(str){ let s = str; if(s && s.length>0){ if(str.indexOf("_25")>-1){ - s = s.replaceAll('_25','%'); + s = s.split('_25').join('%'); } if(s.indexOf("%23")>-1){ - s = s.replaceAll('%23','#'); + s = s.split('%23').join('#'); } if(s.indexOf("%2F")>-1){ - s = s.replaceAll('%2F','/'); + s = s.split('%2F').join('/'); } } return s; @@ -324,6 +328,9 @@ export function returnbar(str){ // 手动添加/修改mate标签 export function addMeta(name, content){ + if (__SERVER__) { + document = domObj.window.document + } if(document.querySelector(`meta[name='${name}']`)){ document.querySelector(`meta[name='${name}']`).content=content; }else{ @@ -344,16 +351,19 @@ export function addMeta(name, content){ * projectId 项目唯一标识 */ export function setSeoMeta(keyWords, title, description, url, owner, projectId) { + if (__SERVER__) { + document = domObj.window.document + } // 服务端没有location - const host = window.location.host - const origin = window.location.origin - document.querySelector(`meta[property='og:title']`).content = title + ' | GitLink'; - document.querySelector(`title`).textContent = title + ' | GitLink'; + const host = window.location.host === 'null' || !window.location.host ? ssrHost : window.location.host + const origin = window.location.origin === 'null' || !window.location.origin ? ssrOrigin : window.location.origin + document.querySelector(`meta[property='og:title']`).content = title; + document.querySelector(`title`).textContent = title; document.querySelector(`meta[property='og:url']`).content = origin + url; - document.querySelector(`meta[property='og:description']`).content = description + ' | GitLink'; - document.querySelector(`meta[property='og:image:alt']`).content = description + ' | GitLink'; - document.querySelector('meta[name="Keywords"]').content= `${ keyWords },${ keyWords ? '' : 'GitLink, git, 开源, 代码托管, 项目管理, 版本控制, 代码分享, 项目协作, 协同开发平台' }` ; - document.querySelector(`meta[name='description']`).content = description + ' | GitLink'; + document.querySelector(`meta[property='og:description']`).content = description; + document.querySelector(`meta[property='og:image:alt']`).content = description; + document.querySelector('meta[name="Keywords"]').content= `${ keyWords }${ keyWords ? '' : 'GitLink, git, 开源, 代码托管, 项目管理, 版本控制, 代码分享, 项目协作, 协同开发平台' }` ; + document.querySelector(`meta[name='description']`).content = description; document.querySelector(`meta[name='go-import']`).content = host + url + ' git ' + origin + url; document.querySelector(`meta[name='octolytics-dimension-user_login']`).content = owner; if (projectId) { diff --git a/src/forge/Badge/Index.jsx b/src/forge/Badge/Index.jsx index 121267d50..a84fc8a54 100644 --- a/src/forge/Badge/Index.jsx +++ b/src/forge/Badge/Index.jsx @@ -29,7 +29,7 @@ function Badge(props) { } else { setProjectDetail(result.data); // seo优化设置 - let keyWords = `${owner},${projectsId},${result.data.author.name},`; + let keyWords = `${owner},${projectsId},${result.data.author.name}`; let title = `${owner}/${projectsId}${result.data.description ? ':' + result.data.description : ''}`; setSeoMeta(keyWords, title, result.data.description, `/${owner}/${projectsId}`, owner, projectsId); } diff --git a/src/forge/Information/Component/partner.jsx b/src/forge/Information/Component/partner.jsx index 03d1d3940..b07cb3590 100644 --- a/src/forge/Information/Component/partner.jsx +++ b/src/forge/Information/Component/partner.jsx @@ -1,5 +1,5 @@ import React , { useEffect } from 'react'; -import Slider from 'react-slick'; +// import Slider from 'react-slick'; import { httpUrl } from '../fetch'; import axios from 'axios'; import { useState } from 'react'; diff --git a/src/forge/Information/Pages/headerPagebyCCF.jsx b/src/forge/Information/Pages/headerPagebyCCF.jsx index 1e3b10b11..d73326d70 100644 --- a/src/forge/Information/Pages/headerPagebyCCF.jsx +++ b/src/forge/Information/Pages/headerPagebyCCF.jsx @@ -116,7 +116,7 @@ function HeaderPageCCF(props) { { // 新闻动态 data && data.cmsShow === 1 && newsList && newsList.length >= 0 && -
{data.homepageCmsTitle}