Coder Social home page Coder Social logo

Comments (21)

kuitos avatar kuitos commented on May 21, 2024 1

@shengbeiniao dynamic import 场景配下 publicPath 就可以了。微信上班一般不怎么看,相关问题也可以到 umi 群里沟通:smile:

from qiankun.

LSWlee avatar LSWlee commented on May 21, 2024 1

能否使用静态的方式呢?将子应用全部打包上传,然后主应用加载本地的本地的子应用静态文件?

我上面说的那种需求对于除 web 部署外有一定的场景。比如在进行桌面端部署(有可能是离线环境),简单来说就可以直接使用 Electron 去加载主应用,所有的子应用也不需要通过网络获取,而是全部打包在本地。

请问可以在Electron中使用qiankun来加载本地离线子应用吗?

from qiankun.

kuitos avatar kuitos commented on May 21, 2024

暂不支持,pr is welcome😀

from qiankun.

navono avatar navono commented on May 21, 2024

能否使用静态的方式呢?将子应用全部打包上传,然后主应用加载本地的本地的子应用静态文件?

from qiankun.

kuitos avatar kuitos commented on May 21, 2024

@navono 应用发布部署后不存在本地这种概念吧,你说的本地是指?

from qiankun.

navono avatar navono commented on May 21, 2024

我没解释清楚。基本现在主流是按照这个库的使用方式,也就是主应用加载另外服务上的子应用,像 README 写的一样:

registerMicroApps(
  [
    { name: 'react app', entry: '//localhost:7100', render, activeRule: genActiveRule('/react') },
    { name: 'vue app', entry: { scripts: [ '//localhost:7100/main.js' ] }, render, activeRule: genActiveRule('/vue') },
  ],
  {
    beforeLoad: [async app => {
      console.log('before load', app);
    }],
    beforeMount: [async app => {
      console.log('before mount', app);
    }],
    afterMount: [async app => {
      console.log('before mount', app);
    }],
    afterUnmount: [async app => {
      console.log('after unload', app);
    }],
  },
);

entry 写的是子模块的地址,例如://localhost:7100

但是我有另外一种需求(可能不是很常见)。就拿上面代码的例子来说,也就是我将子应用(也就是 react appvue app)进行 build,然后将它们的 bundle 放到主应用中,比如 submodule 下。最后由主应用像使用import 导入模块一样将子应用的导入。

我看到 single-spa 下有通过 SystemJS 导入的方式。所以我的问题是,qiankun 是否也支持这种方式?(我还没详细看 qiankun 的代码)

from qiankun.

navono avatar navono commented on May 21, 2024

我上面说的那种需求对于除 web 部署外有一定的场景。比如在进行桌面端部署(有可能是离线环境),简单来说就可以直接使用 Electron 去加载主应用,所有的子应用也不需要通过网络获取,而是全部打包在本地。

from qiankun.

kuitos avatar kuitos commented on May 21, 2024

systemjs import 的方式也是拉的远程资源,我猜你说的是 es dynamic import 的方式吧,但是这种方式要求主子应用共用一个 bundler 一起打包,意味着子应用更新需要主应用也重新打包一次,这不是 qiankun 推荐的方式

from qiankun.

navono avatar navono commented on May 21, 2024

不需要和主应用一起打包。子应用打包可以是分开的,打包后的文件需要重新部署到主应用上。

from qiankun.

kuitos avatar kuitos commented on May 21, 2024

@navono 不一起打包主应用如何引子应用的包?

from qiankun.

navono avatar navono commented on May 21, 2024

就是类似上面说的,所有的子应用独立打包后,放到主应用的部署的某个目录下,例如:submodules,以各自的模块名称命名子文件夹存放。类似这个项目 lotus-scaffold-micro-frontend-portal

from qiankun.

kuitos avatar kuitos commented on May 21, 2024

@navono systemjs 方式也是通过网络拉取的,本质你还是把子应用部署到了一个静态 server 下面

from qiankun.

navono avatar navono commented on May 21, 2024

systemjs 可以 load 主应用的相对目录下的资源。如果按照上面说的那种场景,我把所有的代码放到 electron 宿主里,就不存在从网络拉取的操作。所以核心问题是,不同的部署方式导致开发过程中的各个模块的集成方式的问题。

from qiankun.

kuitos avatar kuitos commented on May 21, 2024

不确定你用的哪个版本的 systemjs,新的版本是不支持读本地文件系统的。BTW,如果是读文件系统,直接 require 就够用了吧

from qiankun.

shengbeiniao avatar shengbeiniao commented on May 21, 2024

看了遍qiankun的代码,楼上说的只需要用一个web server分不同的目录就可以解决,可以写一个脚本针对不同子应用分开编译最后把dist copy到主应用目录下,不过对于umi应用来说,有个问题就是dynamicImport,引用的路径是相对于web server根路径的,如果子应用的路由应用了dynamicImport就会报错了

另外可以加个作者微信么?有些问题想请教下~ @kuitos

from qiankun.

shengbeiniao avatar shengbeiniao commented on May 21, 2024

@shengbeiniao dynamic import 场景配下 publicPath 就可以了。微信上班一般不怎么看,相关问题也可以到 umi 群里沟通😄

单独debug子应用不知道楼主有没有好的思路,目前的解决办法是在子应用入口文件app.js添加如下代码,这样可以运行子应用,如果主应用、子应用都为react,可以把主应用作为layout导出,子应用挂在children下

import * as app from '@tmp/umi'

setTimeout(()=>{
  app.bootstrap().then(()=>{
    app.mount()
  })
},0)

from qiankun.

shengbeiniao avatar shengbeiniao commented on May 21, 2024

已完成umijs/umi-plugin-qiankun#13

from qiankun.

humorHan avatar humorHan commented on May 21, 2024

@shengbeiniao LZ,不想启动主应用,所以主应用是域名地址,某个query参数下会加载本地localhost的子应用,这样的情况应该如何支持子应用修改的热更新?

from qiankun.

luanwulin avatar luanwulin commented on May 21, 2024

@shengbeiniao 请问下,如果没有用umi的话,主应用的webpack配置要如何修改才能支持子应用热更新?

from qiankun.

ruoruoji avatar ruoruoji commented on May 21, 2024

@shengbeiniao 请问下,如果没有用umi的话,主应用的webpack配置要如何修改才能支持子应用热更新?

https://juejin.cn/post/6927972972640600078/ 这个文章好像可以解决

from qiankun.

zdd00 avatar zdd00 commented on May 21, 2024

能否使用静态的方式呢?将子应用全部打包上传,然后主应用加载本地的本地的子应用静态文件?

我上面说的那种需求对于除 web 部署外有一定的场景。比如在进行桌面端部署(有可能是离线环境),简单来说就可以直接使用 Electron 去加载主应用,所有的子应用也不需要通过网络获取,而是全部打包在本地。

请问可以在Electron中使用qiankun来加载本地离线子应用吗?

同问

from qiankun.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.