这篇笔记我们记录UmiJS工程构建发布相关的配置和命令。
UmiJS工程的构建命令是umi build
,不过我们需要使用npm script来运行。前面介绍过分环境配置,实际开发中一般也都是分环境的,因此一般构建执行的是类似cross-env UMI_ENV=production umi build
的命令。
npm run build
构建结果会输出到项目根目录的dist
文件夹,我们将其作为静态资源部署到服务器就行了。
默认情况下UmiJS构建结果是类似umi.js
的形式,这种文件名可能造成缓存问题,即服务端的静态资源已经更新的,但用户的浏览器将资源缓存了,不清缓存可能出现各种页面报错。对于这个问题的解决方案就是给构建结果文件名加一个hash。
export default defineConfig({
hash: true,
});
增加hash: true
配置后,构建输出结果就是类似umi.5622560a.js
这种形式了,如果代码有改动,hash值也会不同,起到了让用户浏览器缓存失效的效果。
考虑到目前大多数前端工程采用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在编译打包阶段的基础路径,这涉及base
和publicPath
两个配置项。
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;
}
}