├── packages ├── app-02 │ ├── src │ │ ├── views │ │ │ ├── Hello │ │ │ │ ├── api.js │ │ │ │ ├── package.json │ │ │ │ ├── index.js │ │ │ │ ├── router.js │ │ │ │ └── views │ │ │ │ │ └── list.vue │ │ │ ├── Module │ │ │ │ ├── api.js │ │ │ │ ├── package.json │ │ │ │ ├── index.js │ │ │ │ ├── router.js │ │ │ │ ├── store.js │ │ │ │ └── views │ │ │ │ │ └── list.vue │ │ │ ├── Test.vue │ │ │ ├── About.vue │ │ │ └── Home.vue │ │ ├── index.js │ │ ├── assets │ │ │ └── logo.png │ │ ├── main.js │ │ ├── App.vue │ │ ├── router │ │ │ └── index.js │ │ └── components │ │ │ └── HelloWorld.vue │ ├── public │ │ ├── favicon.ico │ │ └── index.html │ ├── package.json │ └── webpack.config.js ├── app-01 │ ├── src │ │ ├── store │ │ │ ├── modules │ │ │ │ ├── user.js │ │ │ │ └── menu.js │ │ │ └── index.js │ │ ├── index.js │ │ ├── views │ │ │ └── Hello.vue │ │ ├── assets │ │ │ └── logo.png │ │ ├── main.js │ │ ├── router │ │ │ └── index.js │ │ └── App.vue │ ├── public │ │ ├── favicon.ico │ │ └── index.html │ ├── package.json │ └── webpack.config.js └── app-03 │ ├── src │ ├── index.js │ ├── views │ │ ├── Test.vue │ │ ├── About.vue │ │ └── Home.vue │ ├── assets │ │ └── logo.png │ ├── main.js │ ├── App.vue │ ├── router │ │ └── index.js │ └── components │ │ └── HelloWorld.vue │ ├── public │ ├── favicon.ico │ └── index.html │ ├── package.json │ └── webpack.config.js ├── .gitignore ├── README.md └── package.json /packages/app-02/src/views/Hello/api.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/app-01/src/store/modules/user.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/app-01/src/index.js: -------------------------------------------------------------------------------- 1 | import('./main') -------------------------------------------------------------------------------- /packages/app-02/src/index.js: -------------------------------------------------------------------------------- 1 | import('./main') -------------------------------------------------------------------------------- /packages/app-02/src/views/Module/api.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/app-03/src/index.js: -------------------------------------------------------------------------------- 1 | import('./main') -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules/ 3 | package-lock.lock 4 | packages/*/dist/ 5 | -------------------------------------------------------------------------------- /packages/app-02/src/views/Test.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/app-03/src/views/Test.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/app-01/src/views/Hello.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/app-02/src/views/Hello/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello", 3 | "version": "0.0.1", 4 | "host": "" 5 | } -------------------------------------------------------------------------------- /packages/app-02/src/views/Module/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "module", 3 | "version": "0.0.1", 4 | "host": "" 5 | } -------------------------------------------------------------------------------- /packages/app-01/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisiyizu/webpack5-module-federation-for-vue/HEAD/packages/app-01/public/favicon.ico -------------------------------------------------------------------------------- /packages/app-02/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisiyizu/webpack5-module-federation-for-vue/HEAD/packages/app-02/public/favicon.ico -------------------------------------------------------------------------------- /packages/app-02/src/views/About.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /packages/app-03/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisiyizu/webpack5-module-federation-for-vue/HEAD/packages/app-03/public/favicon.ico -------------------------------------------------------------------------------- /packages/app-03/src/views/About.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /packages/app-01/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisiyizu/webpack5-module-federation-for-vue/HEAD/packages/app-01/src/assets/logo.png -------------------------------------------------------------------------------- /packages/app-02/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisiyizu/webpack5-module-federation-for-vue/HEAD/packages/app-02/src/assets/logo.png -------------------------------------------------------------------------------- /packages/app-02/src/views/Hello/index.js: -------------------------------------------------------------------------------- 1 | import Router from './router'; 2 | 3 | export default { 4 | router: Router, 5 | store: {} 6 | }; 7 | -------------------------------------------------------------------------------- /packages/app-03/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lisiyizu/webpack5-module-federation-for-vue/HEAD/packages/app-03/src/assets/logo.png -------------------------------------------------------------------------------- /packages/app-02/src/views/Module/index.js: -------------------------------------------------------------------------------- 1 | import Router from './router'; 2 | import Store from './store'; 3 | 4 | export default { 5 | router: Router, 6 | store: Store 7 | }; 8 | -------------------------------------------------------------------------------- /packages/app-01/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app-01", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "start": "webpack-dev-server", 6 | "build": "webpack --mode production" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/app-02/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app-02", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "start": "webpack-dev-server", 6 | "build": "webpack --mode production" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/app-03/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app-03", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "start": "webpack-dev-server", 6 | "build": "webpack --mode production" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/app-02/src/views/Hello/router.js: -------------------------------------------------------------------------------- 1 | // 模块:测试 2 | export default [ 3 | { name: 'hello-list', path: '/hello/list', component: () => import(/* webpackChunkName: "test-list" */'./views/list.vue'), meta: { title: '测试' } } 4 | ]; 5 | -------------------------------------------------------------------------------- /packages/app-02/src/views/Module/router.js: -------------------------------------------------------------------------------- 1 | // 模块:测试 2 | export default [ 3 | { name: 'module-list', path: '/module/list', component: () => import(/* webpackChunkName: "view-list" */'./views/list.vue'), meta: { title: '测试' } } 4 | ]; 5 | -------------------------------------------------------------------------------- /packages/app-01/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import menu from './modules/menu' 4 | 5 | Vue.use(Vuex) 6 | 7 | export default new Vuex.Store({ 8 | modules: { 9 | menu 10 | } 11 | }) 12 | -------------------------------------------------------------------------------- /packages/app-02/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | 5 | Vue.config.productionTip = false 6 | 7 | new Vue({ 8 | router, 9 | render: h => h(App) 10 | }).$mount('#app') 11 | -------------------------------------------------------------------------------- /packages/app-03/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | 5 | Vue.config.productionTip = false 6 | 7 | new Vue({ 8 | router, 9 | render: h => h(App) 10 | }).$mount('#app') 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Webpack5 Module Federation For Vue 2 | 3 | ## 1. 安装依赖 4 | ``` bash 5 | npm install 6 | ``` 7 | 8 | ## 2. 启动应用 9 | ``` bash 10 | npm run start 11 | ``` 12 | 13 | ## 3. 访问主应用 14 | ``` bash 15 | 地址: http://localhost:8081 16 | ``` 17 | -------------------------------------------------------------------------------- /packages/app-02/src/App.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /packages/app-03/src/App.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /packages/app-01/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './store' 5 | import Element, { Message } from 'element-ui'; 6 | 7 | Vue.config.productionTip = false 8 | 9 | Vue.use(Element); 10 | 11 | new Vue({ 12 | router, 13 | store, 14 | render: h => h(App) 15 | }).$mount('#app') 16 | -------------------------------------------------------------------------------- /packages/app-02/src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /packages/app-03/src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /packages/app-02/src/views/Hello/views/list.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /packages/app-01/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | Vue.use(VueRouter) 5 | 6 | const routes = [ 7 | { 8 | path: '/', 9 | component: () => import('../views/Hello.vue') 10 | }, 11 | { 12 | path: '/app-02/test', 13 | name: 'app-02-test', 14 | component: () => import('app_02/Test') 15 | }, 16 | { 17 | path: '/app-03/test', 18 | name: 'app-03-test', 19 | component: () => import('app_03/Test') 20 | } 21 | ] 22 | 23 | const router = new VueRouter({ 24 | routes 25 | }) 26 | 27 | export default router 28 | -------------------------------------------------------------------------------- /packages/app-03/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | import Home from '../views/Home.vue' 4 | 5 | Vue.use(VueRouter) 6 | 7 | const routes = [ 8 | { 9 | path: '/', 10 | name: 'Home', 11 | component: Home 12 | }, 13 | { 14 | path: '/about', 15 | name: 'About', 16 | // route level code-splitting 17 | // this generates a separate chunk (about.[hash].js) for this route 18 | // which is lazy-loaded when the route is visited. 19 | component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') 20 | } 21 | ] 22 | 23 | const router = new VueRouter({ 24 | routes 25 | }) 26 | 27 | export default router 28 | -------------------------------------------------------------------------------- /packages/app-02/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /packages/app-03/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /packages/app-02/src/views/Module/store.js: -------------------------------------------------------------------------------- 1 | // 模块化 store 2 | export default { 3 | 'abd': { 4 | namespaced: true, 5 | state: { 6 | num: 0 7 | }, 8 | getters: { 9 | abdStoreNum: state => state.num, 10 | }, 11 | mutations: { 12 | ADD (state) { 13 | state.num += 1; 14 | }, 15 | REDUCE (state) { 16 | state.num -= 1; 17 | } 18 | }, 19 | actions: { 20 | add ({ commit }) { 21 | commit('ADD'); 22 | }, 23 | reduce ({ commit }) { 24 | commit('REDUCE'); 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /packages/app-02/src/views/Module/views/list.vue: -------------------------------------------------------------------------------- 1 | 10 | 25 | -------------------------------------------------------------------------------- /packages/app-02/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | import Home from '../views/Home.vue' 4 | 5 | Vue.use(VueRouter) 6 | 7 | const routes = [ 8 | { 9 | path: '/', 10 | name: 'Home', 11 | component: Home 12 | }, 13 | { 14 | path: '/about', 15 | name: 'About', 16 | // route level code-splitting 17 | // this generates a separate chunk (about.[hash].js) for this route 18 | // which is lazy-loaded when the route is visited. 19 | component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') 20 | }, 21 | { 22 | path: '/test', 23 | name: 'Test', 24 | component: () => import(/* webpackChunkName: "Test" */ '../views/Test.vue') 25 | }, 26 | ] 27 | 28 | const router = new VueRouter({ 29 | routes 30 | }) 31 | 32 | export default router 33 | -------------------------------------------------------------------------------- /packages/app-01/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <%= htmlWebpackPlugin.options.title %> 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "federation-module-exmaple", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "wsrun --parallel start", 7 | "build": "wsrun --parallel build --report" 8 | }, 9 | "workspaces": [ 10 | "packages/*" 11 | ], 12 | "dependencies": { 13 | "axios": "^0.19.2", 14 | "element-ui": "^2.13.0", 15 | "qs": "^6.9.3", 16 | "vue": "^2.6.11", 17 | "vue-router": "^3.1.6", 18 | "vuex": "^3.1.3" 19 | }, 20 | "devDependencies": { 21 | "@babel/core": "^7.9.0", 22 | "babel-loader": "^8.1.0", 23 | "html-webpack-plugin": "^4.0.3", 24 | "minimist": "^1.2.5", 25 | "vue-loader": "^15.9.1", 26 | "vue-template-compiler": "^2.6.11", 27 | "webpack": "git://github.com/webpack/webpack.git#dev-1", 28 | "webpack-cli": "^3.3.11", 29 | "webpack-dev-server": "^3.10.3", 30 | "wsrun": "^5.2.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /packages/app-01/src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /packages/app-01/src/store/modules/menu.js: -------------------------------------------------------------------------------- 1 | const types = { 2 | HANDLE_LEFT_MENU: 'HANDLE_LEFT_MENU', // 收缩左侧菜单 3 | INIT_LEFT_MENU: 'INIT_LEFT_MENU', // 初始化左侧菜单 4 | SET_LEFT_COLLAPSE: "SET_LEFT_COLLAPSE", // 改变左边菜单的收缩宽度 5 | SET_FOOTER_SHOW: "SET_FOOTER_SHOW", // 显示隐藏底部layout 6 | } 7 | const menu = { 8 | state: { 9 | minLeftMenuWidth: 35, 10 | maxLeftMenuWidth: 180, 11 | sidebar: { 12 | opened: true, 13 | width: 180 14 | }, 15 | isCollapse: false, // 菜单默认展开 16 | isFooter: false 17 | }, 18 | getters: { 19 | sidebar: state => state.sidebar, 20 | isCollapse: state => state.isCollapse, 21 | isFooter: state => state.isFooter 22 | }, 23 | mutations: { 24 | [types.HANDLE_LEFT_MENU] (state) { 25 | if (state.sidebar.opened) {//true 26 | state.sidebar.width = state.minLeftMenuWidth; 27 | } else { 28 | state.sidebar.width = state.maxLeftMenuWidth; 29 | } 30 | state.sidebar.opened = !state.sidebar.opened 31 | }, 32 | [types.INIT_LEFT_MENU] (state) { 33 | state.sidebar = state.sidebar 34 | }, 35 | [types.SET_LEFT_COLLAPSE] (state) { 36 | state.isCollapse = !state.isCollapse 37 | }, 38 | [types.SET_FOOTER_SHOW] (state) { 39 | state.isFooter = true 40 | } 41 | 42 | }, 43 | actions: { 44 | handleLeftMenu: ({ commit }) => { 45 | commit(types.HANDLE_LEFT_MENU) 46 | }, 47 | initLeftMenu: ({ commit }) => { 48 | commit(types.INIT_LEFT_MENU) 49 | }, 50 | setLeftCollapse: ({ commit }) => { 51 | commit(types.SET_LEFT_COLLAPSE) 52 | } 53 | } 54 | 55 | } 56 | 57 | 58 | export default menu; -------------------------------------------------------------------------------- /packages/app-03/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require("html-webpack-plugin"); 3 | const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); 4 | const VueLoaderPlugin = require('vue-loader/lib/plugin'); 5 | const webpack = require('webpack'); 6 | 7 | module.exports = { 8 | entry: './src/index.js', 9 | mode: 'development', 10 | devtool: "source-map", 11 | output: { 12 | publicPath: "http://localhost:8083/", 13 | }, 14 | devServer: { 15 | contentBase: path.join(__dirname, "dist"), 16 | port: 8083 17 | }, 18 | resolve: { 19 | extensions: ['*', '.js', '.vue', '.json'], 20 | alias: { 21 | 'assets': path.resolve(__dirname, './src/assets'), 22 | 'vue$': 'vue/dist/vue.esm.js', 23 | '@': path.join(__dirname, './src') 24 | } 25 | }, 26 | module: { 27 | rules: [ 28 | { 29 | test: /\.vue$/, 30 | loader: 'vue-loader' 31 | }, 32 | { 33 | test: /\.js$/, 34 | loader: 'babel-loader' 35 | } 36 | ] 37 | }, 38 | plugins: [ 39 | new VueLoaderPlugin(), 40 | new ModuleFederationPlugin({ 41 | name: "app_03", 42 | library: { type: "var", name: "app_03" }, 43 | filename: "remoteEntry.js", 44 | exposes: { 45 | Test: './src/views/Test.vue' 46 | }, 47 | shared: ["vue", "vue-router"] 48 | }), 49 | new HtmlWebpackPlugin({ 50 | template: "./public/index.html", 51 | inject: true, 52 | title: 'app-03 测试' 53 | }), 54 | //开发环境下的baseURL 55 | new webpack.DefinePlugin({ 56 | BASE_URL: JSON.stringify('./') 57 | }) 58 | ] 59 | } -------------------------------------------------------------------------------- /packages/app-01/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require("html-webpack-plugin"); 3 | const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); 4 | const VueLoaderPlugin = require('vue-loader/lib/plugin'); 5 | const webpack = require('webpack'); 6 | 7 | module.exports = { 8 | entry: './src/index.js', 9 | mode: 'development', 10 | devtool: "source-map", 11 | output: { 12 | publicPath: "http://localhost:8081/", 13 | }, 14 | devServer: { 15 | contentBase: path.join(__dirname, "dist"), 16 | port: 8081 17 | }, 18 | resolve: { 19 | extensions: ['*', '.js', '.vue', '.json'], 20 | alias: { 21 | 'assets': path.resolve(__dirname, './src/assets'), 22 | 'vue$': 'vue/dist/vue.esm.js', 23 | '@': path.join(__dirname, './src') 24 | } 25 | }, 26 | module: { 27 | rules: [ 28 | { 29 | test: /\.vue$/, 30 | use: 'vue-loader', 31 | exclude: file => ( 32 | /node_modules/.test(file) && 33 | !/\.vue\.js/.test(file) 34 | ) 35 | }, 36 | { 37 | test: /\.js$/, 38 | use: 'babel-loader' 39 | } 40 | ] 41 | }, 42 | plugins: [ 43 | new VueLoaderPlugin(), 44 | new ModuleFederationPlugin({ 45 | name: "app_01", 46 | library: { type: "var", name: "app_01" }, 47 | remotes: { 48 | app_02: "app_02", 49 | app_03: "app_03" 50 | } 51 | }), 52 | new HtmlWebpackPlugin({ 53 | template: "./public/index.html", 54 | inject: true, 55 | title: 'app_01 测试' 56 | }), 57 | //开发环境下的baseURL 58 | new webpack.DefinePlugin({ 59 | BASE_URL: JSON.stringify('./') 60 | }) 61 | ] 62 | } -------------------------------------------------------------------------------- /packages/app-02/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require("html-webpack-plugin"); 3 | const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); 4 | const VueLoaderPlugin = require('vue-loader/lib/plugin'); 5 | const webpack = require('webpack'); 6 | 7 | module.exports = { 8 | entry: './src/index.js', 9 | mode: 'development', 10 | devtool: "source-map", 11 | output: { 12 | publicPath: "http://localhost:8082/", 13 | }, 14 | devServer: { 15 | contentBase: path.join(__dirname, "dist"), 16 | port: 8082 17 | }, 18 | resolve: { 19 | extensions: ['*', '.js', '.vue', '.json'], 20 | alias: { 21 | 'assets': path.resolve(__dirname, './src/assets'), 22 | 'vue$': 'vue/dist/vue.esm.js', 23 | '@': path.join(__dirname, './src') 24 | } 25 | }, 26 | module: { 27 | rules: [ 28 | { 29 | test: /\.vue$/, 30 | loader: 'vue-loader' 31 | }, 32 | { 33 | test: /\.js$/, 34 | loader: 'babel-loader' 35 | } 36 | ] 37 | }, 38 | plugins: [ 39 | new VueLoaderPlugin(), 40 | new ModuleFederationPlugin({ 41 | name: "app_02", 42 | library: { type: "var", name: "app_02" }, 43 | filename: "remoteEntry.js", 44 | exposes: { 45 | Test: './src/views/Test.vue', 46 | Hello: './src/views/Hello', 47 | Module: './src/views/Module' 48 | }, 49 | shared: ["vue", "vue-router", "vuex", 'element-ui', 'axios', 'qs'] 50 | }), 51 | new HtmlWebpackPlugin({ 52 | template: "./public/index.html", 53 | inject: true, 54 | title: 'app-02 测试' 55 | }), 56 | //开发环境下的baseURL 57 | new webpack.DefinePlugin({ 58 | BASE_URL: JSON.stringify('./') 59 | }) 60 | ] 61 | } -------------------------------------------------------------------------------- /packages/app-02/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 76 | 77 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /packages/app-03/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 76 | 77 | 85 | 86 | 87 | --------------------------------------------------------------------------------