-
Notifications
You must be signed in to change notification settings - Fork 563
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
基座应用和子应用都是vite+react #283
Comments
这个官网有写 |
我是这样改了 还是会有这个问题 |
看了下我的项目 |
主要问题是子应用写了补全资源就成功了一次,这就很气。老兄有代码地址吗,我看看到底差在什么地方 |
没什么特殊的 子应用就按照文档编写了一个vite插件
return {
name: "vite:micro-app",
apply: "build",
configResolved(config) {
// 获取资源地址前缀
basePath = `${basePath}${config.base}${config.build.assetsDir}/`;
},
renderChunk(code, chunk) {
// build后,import会通过相对地址引入模块,需要将其补全
if (chunk.fileName.endsWith(".js") && /(from|import)(\s*['"])(\.\.?\/)/g.test(code)) {
code = code.replace(/(from|import)(\s*['"])(\.\.?\/)/g, (all, $1, $2, $3) => {
return all.replace($3, new URL($3, basePath).href);
});
}
return code;
},
}; |
基座里microApp.start()那部分的代码贴一下看看 |
差不多,你启动看一下 |
还是一样 的问题 |
|
感谢大佬 |
子应用用vite不太友好,个人实践后有很多小问题,建议还是webpack吧 |
成功了吗? 我基座 ,子应用都是vite react |
xdm 我的成功了 突然之间开窍了。 所以当你一下子解决不了,那不妨抽根烟 ,或者睡一觉 试试。 修改了一点文档。希望能能讲解的清楚一下。 下面是我的完整配置 (关键是 基座应用配置 // 入口页面
<micro-app
name="basename" // name(必传):应用名称
url="http://localhost:3001/basename/"
inline // 使用内联script模式
disableSandbox // 关闭沙箱
></micro-app>
// 入口 main.js
import microApp from '@micro-zoe/micro-app'
// microApp.start()
microApp.start({
plugins: {
modules: {
// 注意这里 子应用的name值
"basename": [{
loader(code) {
if (process.env.NODE_ENV === 'development') {
// 这里 basename 需要和子应用vite.config.js中base的配置保持一致
code = code.replace(/(from|import)(\s*['"])(\/basename\/)/g, all => {
return all.replace('/basename/', 'http://localhost:3001/basename/')
})
}
return code
}
}]
}
}
}) 子应用除了要修改挂载的id外,还需要: // vite.config.js
import { join } from 'path';
import { writeFileSync } from 'fs';
export default defineConfig({
base: `${process.env.NODE_ENV === 'production' ? 'http://my-site.com' : ''}/basename/`,
plugins: [
(function () {
let basePath = '';
return {
name: 'basename',
apply: 'build',
configResolved(config) {
basePath = `${config.base}${config.build.assetsDir}/`;
},
writeBundle(options, bundle) {
for (const chunkName in bundle) {
if (Object.prototype.hasOwnProperty.call(bundle, chunkName)) {
const chunk = bundle[chunkName];
if (chunk.fileName && chunk.fileName.endsWith('.js')) {
chunk.code = chunk.code.replace(
/(from|import\()(\s*['"])(\.\.?\/)/g,
(all, $1, $2, $3) => {
return all.replace($3, new URL($3, basePath));
},
);
const fullPath = join(options.dir, chunk.fileName);
writeFileSync(fullPath, chunk.code);
}
}
}
},
};
})(),
],
}) |
按照这个接入也没有成功啊(react+webpack主 + vite+react子) |
demo里面是部署在同一域名下 |
我用1.x的版本也遇到这个问题 |
micro-app版本:1.0.0-beta.4 按照1.x的文档 https://micro-zoe.com/docs/1.x/#/zh-cn/framework/vite ,使用iframe方式接入 控制台报错: |
Failed to resolve module specifier "/node_modules/vite/dist/client/env.mjs". Invalid relative url or base scheme isn't hierarchical
Uncaught TypeError: Failed to resolve module specifier "/@react-refresh". Invalid relative url or base scheme isn't hierarchical.
Uncaught TypeError: Failed to resolve module specifier "/node_modules/.vite/react.js?v=22bb5dc8". Invalid relative url or base scheme isn't hierarchical.
The text was updated successfully, but these errors were encountered: