umi [Bug] Yarn Deploy 时pluginmanager为空

9lowa7mx  于 2023-03-19  发布在  Yarn
关注(0)|答案(4)|浏览(256)

What happens?

https://github.com/umijs/umi/blob/master/packages/plugins/src/request.ts#L157
发生空指针错误

Mini Showcase Repository(REQUIRED)

以下项目用antd pro v5搭建
https://github.com/fengertao/SudokuMasterV3/tree/master/SudokuMasterUI

如果用yarn start:dev启动,则可以正常执行,显示登录页面,输入账户密码后,点击登录进入系统(后台的代码在 https://github.com/fengertao/SudokuMasterV3/tree/master/SudokuMasterServ )

如果做生产部署,执行 yarn:deploy (rm -rf dist && max build && rm -rf ../SudokuMasterServ/src/main/resources/static && cp -r dist ../SudokuMasterServ/src/main/resources/static),然后编译启动后台,可以显示登陆页面,但输入账户密码后,点击登录报错:
TypeError: Cannot read properties of null (reading 'applyPlugins')
at dn (umi.a854bfc6.js:1099:5368)
at Cn (umi.a854bfc6.js:1099:5498)
at w (umi.a854bfc6.js:1099:46552)
at p__User__Login__index.dfb9a4e1.async.js:1:1975
at x (umi.a854bfc6.js:1200:3106)
at Generator._invoke (umi.a854bfc6.js:1200:2843)
at Generator.next (umi.a854bfc6.js:1200:3468)
at h (umi.a854bfc6.js:1197:90287)
at u (umi.a854bfc6.js:1197:90484)

加了一下log
发现是在src/.umi/plugin-request/request.ts第135行
(对应 https://github.com/umijs/umi/blob/master/packages/plugins/src/request.ts#L157)
config = getPluginManager().applyPlugins({
这里的getPluginManager()返回null

可以合理猜测,yarn start:dev启动的项目,plugin.ts中的pluginManager被初始化了。而yarn deploy打包的项目,plugin.ts中的pluginManager没有被初始化导致错误。

How To Reproduce

Context

  • Umi Version: Umi4.0.12, AntD ProV5
  • Node Version: nodejs v18.7.0
  • Platform: Win11
jjjwad0x

jjjwad0x1#

这个项目依赖有些问题,build 之后 max preview 没遇到你说的问题,可以正常启动,点击 login 也没有 js 报错。

https://github.com/MoeYc/SudokuMasterV3

xbp102n0

xbp102n02#

@fz6m 谢谢查看这个问题。
现状是:yarn build完成后

  • yarn start:dev 正常使用,可以登录(admin/ant.design)
  • max preview 正常使用,点击login也没有js报错
  • yarn:deploy 把编译产生的代码复制到后台service后启动,登录时发生javascript错误。
    也就是说这个问题在yarn start和max preview不会发生,但在yarn:deploy会发生。

PS. 可以帮助说明项目依赖的问题吗,我修改一下。

vu8f3i0k

vu8f3i0k3#

  1. 检查下你的静态资源加载路径是否正确,所有的 .js 文件是否正确的加载完成,如有问题,通过配置 publicPath 解决 。
  2. 检查下部署后的文件重写、接口重写,需要保证:

i. 所有请求都被重写到 index.html ,这在 nginx 中是 try files 。

ii. 保证接口通行,接口的请求地址正确(在生产部署时,没有代理行为,所有的请求必须打向正确的地址),同时不会命中重写规则(一般情况下通过 prefix 或者不同域名保证)。

vof42yt1

vof42yt14#

重写和接口通行应该都是对的。这个前台以前是另一个UI脚手架react-admin写的 ( https://github.com/yezihaohao/react-admin),已经稳定运行好几年了。说明请求重写等是正常的。%EF%BC%8C%E5%B7%B2%E7%BB%8F%E7%A8%B3%E5%AE%9A%E8%BF%90%E8%A1%8C%E5%A5%BD%E5%87%A0%E5%B9%B4%E4%BA%86%E3%80%82%E8%AF%B4%E6%98%8E%E8%AF%B7%E6%B1%82%E9%87%8D%E5%86%99%E7%AD%89%E6%98%AF%E6%AD%A3%E5%B8%B8%E7%9A%84%E3%80%82)
最近切换到antd pro v5上,可以看见登录页面,可以在debug console等看到请求发出是对的。但getPluginManager()返回了一个空的pluginManager

相关问题