构建发布

这篇笔记我们记录UmiJS工程构建发布相关的配置和命令。

执行构建

UmiJS工程的构建命令是umi build,不过我们需要使用npm script来运行。前面介绍过分环境配置,实际开发中一般也都是分环境的,因此一般构建执行的是类似cross-env UMI_ENV=production umi build的命令。

npm run build

构建结果会输出到项目根目录的dist文件夹,我们将其作为静态资源部署到服务器就行了。

设置编译结果hash

默认情况下UmiJS构建结果是类似umi.js的形式,这种文件名可能造成缓存问题,即服务端的静态资源已经更新的,但用户的浏览器将资源缓存了,不清缓存可能出现各种页面报错。对于这个问题的解决方案就是给构建结果文件名加一个hash。

export default defineConfig({
    hash: true,
});

增加hash: true配置后,构建输出结果就是类似umi.5622560a.js这种形式了,如果代码有改动,hash值也会不同,起到了让用户浏览器缓存失效的效果。

服务端Nginx配置

考虑到目前大多数前端工程采用History路由,这种路由需要Nginx上进行一些特殊配置,保证无论请求什么路径都返回前端的index.html而非HTTP的404响应,这样可以将路由判断交给前端,下面是一个例子。

server {
    listen       8080;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

对于那些部署在非根路径的项目,例如/backend,还需要做一些额外的配置。首先我们需要配置Umi在编译打包阶段的基础路径,这涉及basepublicPath两个配置项。

import { defineConfig } from "umi";

export default defineConfig({
  base: "/backend",
  publicPath: "/backend/",
});

Nginx配置中也需要做对应的处理,例子如下。

server {
    listen       8080;
    location /backend {
        alias /usr/share/nginx/html;
        index index.html index.htm;
        try_files $uri $uri/ /backend/index.html;
    }
}
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap