yuntian001 / midway-vite-view

midway vite 服务端渲染(ssr)/客户端渲染(client)模板 支持vue3 react
MIT License
12 stars 6 forks source link

关于目前优化项目时遇到的一些问题 #2

Closed javaswing closed 2 years ago

javaswing commented 2 years ago

如题,在这几天在抽时间优化该项目中发现的一些问题,不知道怎么修改合适。特意列出来希望能讨论下。

希望能讨论下怎么解决?

yuntian001 commented 2 years ago

你是希望自定义打包路径,然后把自定义的值放在配置中么。 设计这个参数的初衷是担心打包模式1失败,(打包模式1用到了middway配置进行打包,middway没有提供在命令里面拿去config的方式,我在vite源码里找的解析ts的方法根据路径收动解析的,担心不稳定,会因为某些原因失败) 使用打包模式2(根据路径遍历不加载配置)傻瓜式打包时,可以指定打包地址为staticFile下正确的文件夹地址。 正常情况下如果打包模式1能生效不建议指定outdir。 不过可以在配置项中定义一个配置去更改html 这样更改staticFileConfig的默认静态路径和新加的配置项是否可以满足你的需求

yuntian001 commented 2 years ago

另外打包模式1下,命令配置应该尽可能在配置中获取,而不是通过命令参数传入,因为项目运行时无法拿到命令参数,但是可以拿到配置项。 命令参数应该作为辅助项,在比较了解规则的情况下使用,这样打包出来的结果和配置项配合使用才能成功访问对应路径代码。

javaswing commented 2 years ago

你是希望自定义打包路径,然后把自定义的值放在配置中么。 设计这个参数的初衷是担心打包模式1失败,(打包模式1用到了middway配置进行打包,middway没有提供在命令里面拿去config的方式,我在vite源码里找的解析ts的方法根据路径收动解析的,担心不稳定,会因为某些原因失败) 使用打包模式2(根据路径遍历不加载配置)傻瓜式打包时,可以指定打包地址为staticFile下正确的文件夹地址。 正常情况下如果打包模式1能生效不建议指定outdir。 不过可以在配置项中定义一个配置去更改html 这样更改staticFileConfig的默认静态路径和新加的配置项是否可以满足你的需求

我当初看你的代码时就发现在了打包命令和最终的ssr运行目录不同步的问题。没有理解怎么想的,才有了现在的疑问。你的设计也可以不过最好在打包时屏蔽outdir这个设计,万一使用者没有看源代码,就被坑了。

说下另一个坑,在使用docker启用多层构建的时候如果不把view文件夹复制过去,docker直接启动不起来,对应的dockerfile如下:

# 启用多阶层构建
FROM node:14 AS build

WORKDIR /app

COPY . .

RUN npm install --registry=https://registry.npmmirror.com

RUN npm run build

FROM node:14-alpine

WORKDIR /app

COPY --from=build /app/dist ./dist
COPY --from=build /app/bootstrap.js ./
COPY --from=build /app/package*.json ./
COPY --from=build /app/public ./public
# 下面一行如果不写直接起不来,因为一旦使用了midway-view包,就必须有这个目录
COPY --from=build /app/view ./view

ENV TZ="Asia/Shanghai"

RUN npm install --production --registry=https://registry.npmmirror.com

EXPOSE 80

CMD ["npm", "run", "start"]
yuntian001 commented 2 years ago

你是希望自定义打包路径,然后把自定义的值放在配置中么。 设计这个参数的初衷是担心打包模式1失败,(打包模式1用到了middway配置进行打包,middway没有提供在命令里面拿去config的方式,我在vite源码里找的解析ts的方法根据路径收动解析的,担心不稳定,会因为某些原因失败) 使用打包模式2(根据路径遍历不加载配置)傻瓜式打包时,可以指定打包地址为staticFile下正确的文件夹地址。 正常情况下如果打包模式1能生效不建议指定outdir。 不过可以在配置项中定义一个配置去更改html 这样更改staticFileConfig的默认静态路径和新加的配置项是否可以满足你的需求

我当初看你的代码时就发现在了打包命令和最终的ssr运行目录不同步的问题。没有理解怎么想的,才有了现在的疑问。你的设计也可以不过最好在打包时屏蔽outdir这个设计,万一使用者没有看源代码,就被坑了。

说下另一个坑,在使用docker启用多层构建的时候如果不把view文件夹复制过去,docker直接启动不起来,对应的dockerfile如下:

# 启用多阶层构建
FROM node:14 AS build

WORKDIR /app

COPY . .

RUN npm install --registry=https://registry.npmmirror.com

RUN npm run build

FROM node:14-alpine

WORKDIR /app

COPY --from=build /app/dist ./dist
COPY --from=build /app/bootstrap.js ./
COPY --from=build /app/package*.json ./
COPY --from=build /app/public ./public
# 下面一行如果不写直接起不来,因为一旦使用了midway-view包,就必须有这个目录
COPY --from=build /app/view ./view

ENV TZ="Asia/Shanghai"

RUN npm install --production --registry=https://registry.npmmirror.com

EXPOSE 80

CMD ["npm", "run", "start"]

这个校验是middway 自己对于渲染模板路径的校验, image 虽然在部署环境用不到view/文件夹的内容 但是需要保留index.html 不然middway会直接校验路径不通过。

可以在config.prod.ts(生产环境配置文件)中指定模板文件夹来规避这个问题 比如

//src/config/config.prod.ts
import { MidwayConfig } from '@midwayjs/core';
import * as path from "path";
export default {
  view:{
    defaultViewEngine: 'viteView',
    rootDir: <unknown>{
      default: path.join(__dirname, '../../public/html'),
    }
  }
} as MidwayConfig;

我会将这个配置项放到example中去