├── 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 |
2 | hello app-02 test
3 |
--------------------------------------------------------------------------------
/packages/app-03/src/views/Test.vue:
--------------------------------------------------------------------------------
1 |
2 | hello app-03 test
3 |
--------------------------------------------------------------------------------
/packages/app-01/src/views/Hello.vue:
--------------------------------------------------------------------------------
1 |
2 | Hello Module Federation
3 |
--------------------------------------------------------------------------------
/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 |
2 |
3 |
This is an about page
4 |
5 |
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 |
2 |
3 |
This is an about page
4 |
5 |
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 |
2 |
3 |
4 | Home|
5 | About
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/packages/app-03/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Home|
5 | About
6 |
7 |
8 |
9 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
18 |
--------------------------------------------------------------------------------
/packages/app-03/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
18 |
--------------------------------------------------------------------------------
/packages/app-02/src/views/Hello/views/list.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
test 模块页面,获取abd模块下store 数据{{abdStoreNum}}
4 |
5 |
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 |
2 |
3 |
module 模块页面,{{url}}
4 |
新增
5 |
减少
6 |
{{abdStoreNum}}
7 |
8 |
9 |
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 |
2 |
3 |
4 | app-01|
5 | app-02(页面)|
6 | app-02(模块)|
7 | app-03
8 |
9 |
10 |
11 |
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 |
2 |
3 |
{{ msg }}
4 |
5 | For a guide and recipes on how to configure / customize this project,
6 |
check out the
7 | vue-cli documentation.
12 |
13 |
Installed CLI Plugins
14 |
30 |
Essential Links
31 |
48 |
Ecosystem
49 |
74 |
75 |
76 |
77 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/packages/app-03/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
5 | For a guide and recipes on how to configure / customize this project,
6 |
check out the
7 | vue-cli documentation.
12 |
13 |
Installed CLI Plugins
14 |
30 |
Essential Links
31 |
48 |
Ecosystem
49 |
74 |
75 |
76 |
77 |
85 |
86 |
87 |
--------------------------------------------------------------------------------