Skip to content
On this page

2022-11-一次官网开发的技术选型调研

1. 场景需求

公司官网,首页和介绍页需要seo,其他页面不需要,但有业务功能。

2. 技术方案

  • ssr
  • 静态页面
  • 静态页面+React

3. ssr被pass的原因

ssr本质就是起一个node服务,然后这个node服务返回带dom结构的html。

react提供了把虚拟dom转化成dom字符串的功能,node服务再把dom字符串返回给页面。

// ES modules
import ReactDOMServer from 'react-dom/server';

ReactDOMServer.renderToString(element)

缺点就是需要服务器起一个服务,占用服务器资源,当网站需要大规模推广的时候,服务端承受的压力较大。

4. 静态页面被pass的原因

开发麻烦

5. 静态页面+React的实现

import { defineConfig } from 'umi';
import routes from './config/routes';
import theme from './src/theme';
const outputPath = 'dist/react'; // 指定输出路径
const env = process.env.NODE_ENV;
const path = require('path');
export default defineConfig({
  nodeModulesTransform: {
    type: 'none',
  },
  routes: routes,
  fastRefresh: {},
  outputPath,
  publicPath: env === 'development' ? '/' : './',
  hash:true,  //对打包的静态资源随机增加后缀
  title: '轻索',
  dynamicImport: {
    loading: '@/pages/loading',
  },
  antd: {
    compact: true,
  },
  dva: {
    hmr: true, // 表示是否启用 dva model 的热更新
  },
  theme,
  proxy: {
    '/api': {
      'target': '',
      'changeOrigin': true,
      'pathRewrite': { '^/api' : '' },
    },
  },
  ignoreMomentLocale: true, // 忽略 moment 的 locale 文件,用于减少尺寸
  copy:[
    {
      from: 'web',
      to:'../',
    },
  ],
});

web文件夹下就是静态页面,最终打包出来的路径就是 图片.png

6. 参考文章

7. 遗留问题

localhost:8000 --- 访问index.html没问题 localhost:8000/douyin.html --- 访问douyin.html没问题 localhost:8000/qingsuo.html --- 访问qingsuo.html没问题 localhost:8000/react --- 不会到react/index.html localhost:8000/react/index.html --- 才会访问react/index.html localhost:8000/react/todo --- 也不会到react/index.html

需要SRE配置/react/*全部指向/react/index.html

8. 遗留问题解决

上面的问题,只是在测试环境中有问题,我本地采取了两种静态服务器去查看问题,发现都是正常的。

8.1 nginx

8.2 http-server

- cd dist
- http-server

8.3 生产环境增加oss配置

oss不支持应该是oss必须加什么设置,最后联系SRE,生产环境因为是单独的桶,所以可以单独设置支持子目录如下: 图片.png

8.4 测试环境的配置

测试环境是整个公司都公用一个桶,所以不方便做这些统一的设置,这里采取路径指向的设置

Released under the MIT License.