diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js
index 9bd696472..4eb3c41ed 100644
--- a/config/webpack.config.prod.js
+++ b/config/webpack.config.prod.js
@@ -30,9 +30,9 @@ const terserPlugin = new TerserWebpackPlugin({
terserOptions: {
compress: {
warnings: false,
- drop_console: false,
+ drop_console: true,
drop_debugger: true,
- // pure_funcs: ['console.log'] //移除console
+ pure_funcs: ['console.log'] //移除console
}
}
});
diff --git a/package.json b/package.json
index 8b9a2ab15..7d6665c35 100644
--- a/package.json
+++ b/package.json
@@ -145,6 +145,7 @@
"scripts": {
"start": "node scripts/start.js",
"build": "cross-env NODE_ENV=production babel-node --max_old_space_size=15360 scripts/build.js",
+ "build:server": "cross-env NODE_ENV=production webpack --config config/webpack.server.js",
"build:dll": "webpack --config=./config/webpack.dll.config.js",
"test-build": "cross-env NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js",
"pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js",
diff --git a/server/index.js b/server/index.js
index 9d51d9cc2..151fb1a0f 100644
--- a/server/index.js
+++ b/server/index.js
@@ -35,7 +35,6 @@ function excludePath(req, res, next) {
app.use(excludePath);
app.get('*',function (req,res) {
- console.log('render', req.url)
render(req,res);
})
diff --git a/server/render.js b/server/render.js
index cc2b16d90..3977a7330 100644
--- a/server/render.js
+++ b/server/render.js
@@ -9,14 +9,13 @@ import { getPathType } from './service'
import { serverStore } from "../src/redux/stores/configureStore";
import App from "../src/App";
import { Route } from 'react-router-dom';
+import { setDefaultMeta } from '../src/common/UrlTool'
export const render = async (req,res)=>{
let _route = null,
_match = null;
- const pathData = await getPathType('Eeeros')
- const store = serverStore();
-
+ let store = serverStore();
function matchSubRoutes(routes, url) {
for (const route of routes) {
@@ -66,24 +65,29 @@ export const render = async (req,res)=>{
))
-
- // 注入state
-
- let script = domObj.window.document.getElementById('initState')
- if (!script) {
- script = domObj.window.document.createElement('script')
- script.setAttribute('id', 'initState')
+ if (!content) {
+ // 未匹配到详情页恢复默认header
+ setDefaultMeta()
+ } else {
+ // 匹配到服务端渲染页面注入state
+ let script = domObj.window.document.getElementById('initState')
+ if (!script) {
+ script = domObj.window.document.createElement('script')
+ script.setAttribute('id', 'initState')
+ }
+ script.textContent = `window.__initState__ = ${ JSON.stringify(store.getState()) }`
+
+ domObj.window.document.head.appendChild(script);
}
- script.textContent = `window.__initState__ = ${ JSON.stringify(store.getState()) }`
-
- domObj.window.document.head.appendChild(script);
+
let html = domObj.serialize()
-
const prepHTML=(data,rootString)=>{
data=data.replace('
',`${rootString}
`);
return data;
}
res.send(prepHTML(html, content))
+
+ store = null
}
diff --git a/src/App.js b/src/App.js
index 5e4e4b9e0..e42ee6dc1 100644
--- a/src/App.js
+++ b/src/App.js
@@ -24,6 +24,7 @@ import { SnackbarHOC } from 'educoder';
import { initAxiosInterceptors } from './AppConfig'
import cookie from 'react-cookies';
import InfosIndex from './forge/users/Index'
+import OrganizeIndex from './forge/Team/Index'
window.marked = marked;
const theme = createMuiTheme({
@@ -80,10 +81,10 @@ const http500 = Loadable({
// loading: Loading,
// })
// 组织
-const OrganizeIndex = Loadable({
- loader: () => import('./forge/Team/Index'),
- loading: Loading,
-})
+// const OrganizeIndex = Loadable({
+// loader: () => import('./forge/Team/Index'),
+// loading: Loading,
+// })
const Search = Loadable({
loader: () => import('./modules/search/'),
diff --git a/src/common/UrlTool.js b/src/common/UrlTool.js
index a84a6a9fa..256f1fa15 100644
--- a/src/common/UrlTool.js
+++ b/src/common/UrlTool.js
@@ -349,12 +349,9 @@ export function setSeoMeta(keyWords, title, description, url, owner, projectId)
if(projectId)keyStatement += `/${projectId}`;
if (domObj) {
- console.log('==================domObj===================')
document = domObj.window.document
- console.log('==================document===================', document.querySelector(`meta[property='og:title']`).content)
}
document.querySelector(`meta[property='og:title']`).content = title + keyStatement + ' for gitlink' + keyStatement + ' for git';
- console.log('==================document===================', document.querySelector(`meta[property='og:title']`).content)
document.querySelector(`meta[property='og:url']`).content = window.location.origin + url;
document.querySelector(`meta[property='og:description']`).content = description + ' - ' + title + ' for gitlink' + keyStatement + ' for git';
document.querySelector(`meta[property='og:image:alt']`).content = description + ' - ' + title + ' for gitlink' + keyStatement + ' for git';
@@ -373,4 +370,24 @@ export function setSeoMeta(keyWords, title, description, url, owner, projectId)
if (domObj) {
domObj.window.document.querySelector('meta[name="Keywords"]')
}
+}
+
+export function setDefaultMeta() {
+
+ if (domObj) {
+ document = domObj.window.document
+ }
+ document.querySelector(`meta[property='og:title']`).content = 'GitLink | 确实开源';
+ document.querySelector(`meta[property='og:url']`).content = 'https://gitlink.org.cn/';
+ document.querySelector(`meta[property='og:description']`).content = 'GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境';
+ document.querySelector(`meta[property='og:image:alt']`).content = 'GitLink | 确实开源';
+ document.querySelector('meta[name="Keywords"]').content= 'gitLink,GitLink,gitlink,git,trustie,trustieforge,forge,开源,确实开源,代码托管,Git,开源,内源,项目管理,版本控制,开源代码,代码分享,项目协作,开源项目托管,免费代码托管,Git代码托管,Git托管服务,确实让创建更美好,协同开发平台';
+ document.querySelector(`meta[name='description']`).content = 'GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境';
+ document.querySelector(`meta[name='go-import']`).content ='gitlink.org.cn git https://gitlink.org.cn';
+ document.querySelector(`meta[name='octolytics-dimension-user_login']`).content = 'GitLink';
+ document.querySelector(`meta[name='octolytics-dimension-repository_nwo']`).content = 'GitLink';
+ document.querySelector(`meta[name='octolytics-dimension-repository_network_root_nwo']`).content = 'GitLink';
+ document.querySelector(`meta[name='twitter:title']`).content = 'GitLink | 确实开源';
+ document.querySelector(`meta[name='twitter:description']`).content = 'GitLink,新一代开源创新服务平台 分布式协作开发 一站式过程管理 高效流水线运维 多层次代码分析 多维度用户画像 分布式协作开发 基于Git打造分布式代码托管环境';
+ document.querySelector(`link[rel='canonical']`).href = 'https://gitlink.org.cn';
}
\ No newline at end of file
diff --git a/src/components/render-html.jsx b/src/components/render-html.jsx
index 89c43ff34..b8e9aad77 100644
--- a/src/components/render-html.jsx
+++ b/src/components/render-html.jsx
@@ -105,7 +105,6 @@ export default ({
rs = dompurify.sanitize(rs.replace(/▁/g, "▁▁▁"))
rs = rs.replaceAll('
{
if(readme && readme.replace_content){
diff --git a/src/forge/Main/Detail.js b/src/forge/Main/Detail.js
index 708202895..5d65547ab 100644
--- a/src/forge/Main/Detail.js
+++ b/src/forge/Main/Detail.js
@@ -186,7 +186,6 @@ const getBannerFunc = (owner, projectsId, isServer = false) => {
class Detail extends Component {
constructor(props) {
super(props);
- console.log('=================defaultDetail================', props.defaultDetail)
this.state = {
projectDetail: props.defaultDetail || undefined,
isManager: false,
@@ -255,12 +254,10 @@ class Detail extends Component {
if (!this.props.projectBase) {
const data = await getProjectFunc(owner, projectsId);
- console.log('======================getProjectFunc==============')
if (data.data) {
this.getProject(data.data)
}
} else {
- console.log('======================this.props.projectBase==============')
this.getProject(this.props.projectBase)
}
}
@@ -305,18 +302,14 @@ class Detail extends Component {
secondSync: false,
mirror_status:0
})
- console.log('==================projectMenu=========', this.props.projectMenu)
this.getBanner(this.props.projectMenu)
let projectdata
if (this.props.defaultDetail) {
- console.log('========================this.props.defaultDetail=================')
projectdata = this.props.defaultDetail
} else {
- console.log('========================getDetailFunc=================')
projectdata = await getDetailFunc(owner, projectsId, !window.location.host).data;
}
if (projectdata) {
- console.log('========================projectdata=================')
this.getDetail(projectdata)
}
}
@@ -412,7 +405,6 @@ class Detail extends Component {
data = res.data
}
}
- console.log('=============data==============')
if (data) {
if (data.status === 404) {
if (window.location.pathname.includes('/invite')) {
diff --git a/src/forge/Team/Index.jsx b/src/forge/Team/Index.jsx
index 7094a2332..f79c9d75e 100644
--- a/src/forge/Team/Index.jsx
+++ b/src/forge/Team/Index.jsx
@@ -39,7 +39,7 @@ const ProjectDetail = Loadable({
loader: () => import("../Main/Detail"),
loading: Loading,
});
-export default withRouter(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(
+const team = CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(
((props)=>{
console.log(456)
@@ -117,4 +117,8 @@ export default withRouter(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(
)
})
-))))
\ No newline at end of file
+)))
+
+team.preFetch = ProjectDetail.preFetch
+
+export default withRouter(team)
\ No newline at end of file
diff --git a/src/forge/users/Index.jsx b/src/forge/users/Index.jsx
index 1e03f51f3..305269c42 100644
--- a/src/forge/users/Index.jsx
+++ b/src/forge/users/Index.jsx
@@ -6,16 +6,15 @@ import { withRouter } from "react-router";
import { SnackbarHOC } from "educoder";
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
-import ProjectDetail from "../Main/Detail";
const Infos = Loadable({
loader: () => import("./Infos"),
loading: Loading,
});
-// // forge项目详情
-// const ProjectDetail = Loadable({
-// loader: () => import("../Main/Detail"),
-// loading: Loading,
-// });
+// forge项目详情
+const ProjectDetail = Loadable({
+ loader: () => import("../Main/Detail"),
+ loading: Loading,
+});
class DetailTop extends Component {
constructor(props) {
diff --git a/src/modules/tpm/TPMIndexHOC.js b/src/modules/tpm/TPMIndexHOC.js
index 9b9e61de6..f29b63f0b 100644
--- a/src/modules/tpm/TPMIndexHOC.js
+++ b/src/modules/tpm/TPMIndexHOC.js
@@ -61,8 +61,13 @@ export function TPMIndexHOC(WrappedComponent) {
window.removeEventListener('keyup', this.keyupListener)
}
componentWillMount() {
- // console.log(123)
- // this.fetchUsers();
+ if (!__SERVER__) {
+ this.fetchUsers();
+ } else {
+ this.setState({
+ current_user: {}
+ })
+ }
}
componentDidMount() {
@@ -166,7 +171,7 @@ export function TPMIndexHOC(WrappedComponent) {
publicNav:false
})
}
- let url = `/api/users/get_user_info.json`;
+ let url = `/users/get_user_info.json`;
axios.get(url).then((response) => {
if (response && response.data) {
this.initCommonState(response.data)
@@ -289,6 +294,7 @@ export function TPMIndexHOC(WrappedComponent) {
};
let path =this.props.location.pathname;
let pathCheck = path.indexOf("/zone")>-1 && path.indexOf("/newdetail")>-1 && IsPC();
+ console.log('+++++++++++++++++++++++++++++++fdsafgsda++++++++++++++')
return (
{!publicNav && }
{
- // current_user &&
+ current_user &&
this.initCommonState(user)}
{...this.props} {...this.state} {...common} >
diff --git a/src/services/project.js b/src/services/project.js
index c29599d78..49cda3449 100644
--- a/src/services/project.js
+++ b/src/services/project.js
@@ -4,7 +4,6 @@ const baseUrl = 'https://www.gitlink.org.cn/api'
//
export async function getProjectFunc (owner, projectsId) {
- console.log('4444444444444444444444444')
const url = `${baseUrl}/${owner}/${projectsId}/simple.json`;
return axios.get(url);
}