【umi max】关于umi构建的项目在本地服务运行正常,但是部署时无致命报错却白屏,html文档的#root容器没有子元素的原因及解决办法

我们在部署时运维很可能会因为项目太多,进而放到不同的目录底下,例如project/H5-TEST-DEMO

(其中project是项目的存放目录,而H5-TEST-DEMO才是我们部署的项目根目录)于是乎就会出现我们在本地服务里调试得好好的,但是一打包部署就白屏。

分析下原因:

因为umi在非人工干预修改目录结构的情况下,路由是按照默认路由规则生成的,这其中就包括了默认生成html的规则,默认是src/pages其对应基础访问路径也会默认是/(PS:这个和publicPath不是同一个概念,publicPath是修改打包后存放静态资源的路径),此时我们将项目打包出dist,并且部署到H5-TEST-DEMO目录,会出现白屏,因此基础路径不再是/,而应该是/H5-TEST-DEMO/,因为内层套了一层目录H5-TEST-DEMO,因此需要追加path至完整路径。

PS:之所以#root容器没有被注入子元素,就是因为路由没匹配上,SPA的规则就是页面路由匹配再去加载对应页面的内容并注入到#root元素,此并非nginx的问题,如果Nginx出了问题,那么根路由是访问不进来的,也就查不了element元素

解决办法:

javascript 复制代码
export default defineConfig({
    antd: {},
    base: '/H5-TEST-DEMO/', // 重点是改这个!!!
    // dva: {},
    model: {},
    initialState: {},
    request: {},
    locale: {
        default: 'zh-CN',
        baseSeparator: '-',
        useLocalStorage: true
    },
    favicons: ['/favicon.ico'],
    devtool: !isDevelopment() ? false : 'source-map',
    define: {
        APP_TYPE: process.env.APP_TYPE || '',
        ENV: process.env.ENV || '',
        PLATFORM: getPlatform(),
        'process.env.APP_ENV': process.env.APP_ENV,
        'process.env.APP_AREA': process.env.APP_AREA
    },
    theme: {
        'primary-color': '#5590F6',
        'layout-footer-background': '#F8F9FD'
    },
    alias: {
        '@configs': './configs/'
    },
    routes,
    npmClient: 'yarn',
    links: [
        { href: '//wx-h5-assets.oss-test.aliyuncs.com', rel: 'dns-prefetch' },
    ],
    headScripts,
    scripts: [
        // {
        //     src: 'https://wx-tech-test-buckets.oss-okk.aliyuncs.com/area.js',
        //     defer: true
        // }
    ],
    metas: [
        {
            name: 'viewport',
            content: 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover'
        }
    ],
    codeSplitting: {
        jsStrategy: 'granularChunks'
    },
    esbuildMinifyIIFE: true,
    hash: true,
    targets: {
        safari: 13,
        chrome: 80
    },
    ...(publicPath ? { publicPath } : {}),
    // presets: ['./plugin/print', './plugin/buildVersion'],
    // plugins: ['./plugin/watchFiles', './plugin/collectI18nKey', './plugin/modifyHtml', './plugin/modifyTSConfig'],
    // watchFiles: [LOCALES_SCRIPT_PATH],
    proxy: {
        '/api': {
            target: serverOrigin,
            changeOrigin: true
        }
    },
    ...(process.env.DEAD_CODE
        ? {
              deadCode: {
                  patterns: ['src/**'],
                  exclude: ['src/.umi.*/**', 'src/chat/**', 'src/wfc-util/**', 'src/**/*.md', 'src/**/*.mdx', 'src/**/*.d.ts', 'src/assets/oaicons/**'],
                  detectUnusedFiles: true,
                  detectUnusedExport: true
              }
          }
        : {}),
    jsMinifier: 'esbuild',
    jsMinifierOptions: {
        drop: isProduction() ? ['console', 'debugger'] : []
    },
    chainWebpack(config) {
        // @ts-ignore
        const cacheGroups = config.optimization.splitChunks.values().cacheGroups;
        if (cacheGroups) {
            // cacheGroups['tools'] = {
            //     name: 'tools',
            //     chunks: 'all',
            //     test: /([\\/]node_modules[\\/](moment|rc-field-form[\\/]es|query-string)[\\/])|([\\/]src[\\/]wfc-util[\\/]libs[\\/]han[\\/])/,
            //     priority: 51
            // };
            cacheGroups['antd'] = {
                name: 'antd',
                chunks: 'all',
                test: /[\\/]node_modules[\\/](antd|@ant-design[\\/]icons|ahooks)[\\/]/,
                priority: 50
            };
        }
        return config;
    }
    // mfsu: false
});
相关推荐
前端青山20 分钟前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享1 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
清灵xmf3 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨3 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL3 小时前
npm入门教程1:npm简介
前端·npm·node.js
小白白一枚1114 小时前
css实现div被图片撑开
前端·css
薛一半4 小时前
PC端查看历史消息,鼠标向上滚动加载数据时页面停留在上次查看的位置
前端·javascript·vue.js
@蒙面大虾4 小时前
CSS综合练习——懒羊羊网页设计
前端·css
MarcoPage4 小时前
第十九课 Vue组件中的方法
前端·javascript·vue.js
.net开发4 小时前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf