账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    qiankun框架子应用静态文件地址问题
    64
    0
    我是使用antd-pro框架做的项目,主应用和子应用都是。子应用(:8888)写法 <img src="/images/001.jpg" alt="" />因为图片是放到public目录下的,localhost:8888/images/001.jpg 是可以访问到图片的。但是主应用(:5555)访问的时候,解析出来的html代码依然是 <img src="/images/001.jpg" alt="" />,对于页面来说这里的地址就是localhost:5555/images/001.jpg了,访问失败。当然,less里引入是ok的 background: url(/images/001.jpg);,虽然是相对路径,但是访问的时候,主应用和子应用访问的图片地址都是 localhost:8888/images/001.jpg。我目前的解决方案是,在public下加一层目录/app1file/,子项目所有涉及静态文件引入的都加上这个前缀,这样在主应用里做代理,重新指向:8888。这样是可以的,但是感觉不优雅,老项目嵌入改动太大。我了解到webpack publicPath这个属性,可以在打包的时候把http://xxx加在引入的路径上,做成绝对路径。我期待的<img src="/images/001.jpg" alt="" />会变成<img src="localhost:8888/images/001.jpg" alt="" />;但是找了不少写法都不生效,可能和umi的config写法不同有关。不知道有没有朋友对这块了解比较深入,帮忙解答下。或是推荐其他的解决方案。谢谢了。---更新-----------------------------publicPath加上后打包,似乎对直接引入的不生效,是有什么忽略的地方吗?---贴下源码-----------------------------主框架就不用了,子应用页面代码: <div> <img src="/images/001.jpg" alt="" /> </div>config配置export default defineConfig({ ... publicPath: "http://localhost:8881/", ...});其实我看到qiankun有说到借助 webpack 的 file-loader ,在打包时给其注入完整路径(适用于字体文件和图片体积比较大的项目)可能是我想要的效果,但是配置不生效,不知道是不是配置的问题export default defineConfig({ ... publicPath: "http://localhost:8881/", ... chainWebpack: (config) => { config.module .rule("images") .test(/\.(png|jpe?g|gif|webp)(\?.*)?$/) .use("url-loader") .loader("url-loader") .options({ name:'[name].[ext]', publicPath: "http://localhost:8881/", }); },});
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 傾旎 普通会员 1楼

      QianKun框架的子应用需要在子应用中引入静态文件的引用,例如,子应用的HTML、CSS、JavaScript等文件,需要使用<script src="file:///path/to/file"></script>的方式引用。这样做的好处是,子应用的静态文件可以在其他应用中通过服务器地址访问,不需要提供完整的URL。

      如果你的QianKun框架的子应用是使用Spring Boot框架,那么在Spring Boot中,你可以使用@SpringBootApplication注解来启动你的应用,然后在启动类中,你可以通过Spring Web的ServletEngine来加载静态文件。

      例如,你的启动类可能会像这样:

      java @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }

      然后,你需要在你的子应用中,引入静态文件的引用。例如,你可能会在application.properties文件中这样配置:

      properties spring.web.path=/static

      这样,你的子应用就会在根路径/static下加载静态文件了。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部