single-spa 集成vue3.0 vite 开发环境篇

这两天在折腾singlespa 集成 vue3.0, 折腾了许久, 结果如下:
主项目访问子项目:
在这里插入图片描述
子项目单独起:
在这里插入图片描述
直接上代码:

子项目

vite.js

import {fileURLToPath, URL} from 'node:url'
// import createVitePlugins from './vite/plugins'
import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
const StatsPlugin = require('stats-webpack-plugin')
const path = require('path')
import htmlPlugin from 'vite-plugin-index-html';
const selectorNamespace = require("postcss-selector-namespace");
// https://vitejs.dev/config/
export default defineConfig(({mode, command}) => {
        const {VITE_APP_ENV, VITE_APP_MODULE_NAME} = loadEnv(mode, process.cwd())
        console.log("ssss:", VITE_APP_MODULE_NAME, mode)
        return {
            base: 'http://localhost:3002/vue3/',
            // base: VITE_APP_ENV == 'development' ? `http://localhost:3002/${VITE_APP_MODULE_NAME}/` : '/' + VITE_APP_MODULE_NAME + '/',
            plugins: [
                vue({
                    template: {
                        transformAssetUrls: {
                            base: '/src'
                        }
                    }
                }),
                vueJsx(),
            ],
            resolve: {
                alias: {
                    // '@': fileURLToPath(new URL('./src', import.meta.url))
                    '@': path.resolve(__dirname, './src')
                },
                // https://cn.vitejs.dev/config/#resolve-extensions
                extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.svg']
            },
            build: {
                manifest: true,
                target: 'modules',
                outDir: 'vue3', //指定输出路径
                assetsDir: 'assets', // 指定生成静态资源的存放路径
                minify: 'terser', // 混淆器,terser构建后文件体积更小
                lib: {
                    name: 'lib',
                    entry: path.resolve(__dirname, 'src/main.js'),
                    formats: ['es'],
                },
                rollupOptions: {
                    input: 'src/main.js',
                    format: 'system',
                    preserveEntrySignatures: true
                },
            },
            // 强制预构建插件包
            optimizeDeps: {
                // include: ['axios'],
            },
            rollupOptions: {
                input: 'src/main.js',
                format: 'system',
                preserveEntrySignatures: true
            },
            server: {
                port: 3002,
                host: true,
                open: true,
                proxy: {
                    // https://cn.vitejs.dev/config/#server-proxy
                    '/api': {
                        target: 'http://localhost:3000',
                        changeOrigin: true,
                        rewrite: (p) => p.replace(/^\/api/, '')
                    }
                }
            },
            //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
            css: {
                postcss: {
                    plugins: [
                        selectorNamespace({
                            namespace(css) {
                                /* 无需添加的样式 */
                                if (css.includes("element-variables.scss")) return "";
                                return "#app-vue3";
                            }
                        }),
                        require('autoprefixer')({
                            overrideBrowserslist: [
                                'Android 4.1',
                                'iOS 7.1',
                                'Chrome > 31',
                                'ff > 31',
                                'ie >= 8',
                                '> 1%',
                            ],
                            grid: true,
                        }),
                        require('postcss-flexbugs-fixes'),
                        {
                            postcssPlugin: 'internal:charset-removal',
                            AtRule: {
                                charset: (atRule) => {
                                    if (atRule.name === 'charset') {
                                        atRule.remove();
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
)

main.js

import { createApp,h } from 'vue'
 import { createPinia } from 'pinia'
import singleSpaVue from 'single-spa-vue'
import App from './App.vue'
 import router from './router'

import './assets/main.css'

 const app = createApp(App)
//
app.use(createPinia())
app.use(router)

if (!window.singleSpaNavigate) {
    // delete vueOptions.el
    app.mount('#app-vue3')
}

const vueLifecycles = singleSpaVue({
    createApp,
    appOptions: {
        el: '#app-vue3',
        render() {
            return h(App, {
                props: {
                    // single-spa props are available on the "this" object. Forward them to your component as needed.
                    // https://single-spa.js.org/docs/building-applications#lifecyle-props
                    name: this.name,
                    mountParcel: this.mountParcel,
                    singleSpa: this.singleSpa,
                },
            });
        },
    },
    handleInstance: (app) => {
        app.use(router);
        app.use(createPinia())
    }
});
export const bootstrap = vueLifecycles.bootstrap;
export const mount = vueLifecycles.mount;
export const unmount = vueLifecycles.unmount;

主项目

singleSpa.registerApplication({
    name: "@org/vite-example",
    app: () =>
        import(
            /* webpackIgnore: true */
            //"http://localhost:3000/src/main.js"
            "http://localhost:3002/vue3/src/main.js"
            ),
    activeWhen: ["#/vue3"],
});

接下来:
single-spa 集成 vue3.0 生产篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue-i18n是一个用于Vue.js的国际化插件,用于实现网站或应用程序的多语言支持。它提供了一种简单的方式来管理和切换不同语言的文本内容。关于Vue-i18n在Vue 3.0中的使用,有几点需要注意: 1. 需要下载最新版的vue-i18n插件。你可以通过以下命令来安装最新版本的vue-i18n: `npm install vue-i18n@next` 或 `yarn add vue-i18n@next`。 [2] 2. 在你的`index.js`文件中,你需要导入`createI18n`函数和语言库文件。语言库文件是包含不同语言文本的文件,可以根据需要自行创建。你可以根据以下代码示例来配置i18n实例:<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3.0中使用i18n插件来实现国际化以及切换语言所遇到问题得解决](https://blog.csdn.net/qq_43574079/article/details/112473914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue3.0配置vue-i18n](https://blog.csdn.net/qq_43485006/article/details/120034213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值