- 多页应用集成配置
- 单页应用集成配置
- APP本地dist包集成配置
一. 多页应用集成配置
二. 单页应用集成配置
三. APP本地dist包集成配置
1.要求
- 项目中所有的库和文件尽量打包到 dist 内
- 同时打包的 dist,应该是 APP 内仅需的几个页面(必须 APP 只需要本地加载首页和我的页面,则 dist 内只应该包含首页和我的页面资源,避免 APP 包体积过大)
- 同时支持本地 dist 包方式和 web 线上部署两种方式
2.配置
(1)package.json
打包命令应该修改入口文件,原入口文件都是main.js;
build:dev:home命令将入口文件指到./src/index.js
{
...
"scripts": {
"build:dev": "vue-cli-service build --mode dev",
"build:prd": "vue-cli-service build --mode prd",
"build:dev:home": "vue-cli-service build --mode dev ./src/index.js"
},
...
}
(2)入口文件配置
之所以重新写一个入口文件,是因为本地dist包要剔除一些线上部署不需要的页面,有利于减小APP的包大小(dist需要放到APP包内)
视情况而定, dist内的资源是否需要路由等,不需要的可以删除配置(下面的代码中不包含路由)
/src/index.js
import { createApp } from "vue";
// 只需引入入口文件即可,如需添加路由等其他逻辑,可以自行添加
import Index from "./Index.vue";
createApp(Index).mount("#app");
/src/Index.vue
<template>
<div class="index-page">
<home v-show="showHome"></home>
<my v-show="!showHome"></my>
</div>
</template>
<script>
// 引入两个组件,动态切换
import Home from "@/views/Home";
import My from "@/views/My";
export default {
name: "Index",
data() {
return {
showHome: false,
};
},
components: { Home, My },
};
</script>
(3)模板配置修改
因为APP内加载dist包本就是为了提高加载速度,减少html,js,css等文件的网络请求,所以尽量的将依赖文件都打入到dist内.
vue.config.js配置中,需要去掉Vue,VueRouter,lodash等库文件的网络请求
// 以下是配置完成后的结果
const path = require("path");
console.log("当前环境变量NODE_ENV:", process.env.NODE_ENV);
module.exports = {
chainWebpack: (config) => {
const types = ["vue-modules", "vue", "normal-modules", "normal"];
types.forEach((type) =>
addStyleResource(config.module.rule("scss").oneOf(type))
);
},
// 需要删除此处, 才能把Vue,VueRouter,lodash等库文件打入dist包内
/*if (process.env.NODE_ENV === "production") {
config.set("externals", {
vue: "Vue",
"vue-router": "VueRouter",
lodash: "_",
});
}*/
};
function addStyleResource(rule) {
rule
.use("style-resource")
.loader("style-resources-loader")
.options({
patterns: [path.resolve(__dirname, "./src/styles/common.scss")],
});
}
/public/index.html的修改, 需要删除vue,vue-router,loadsh等库文件的网络加载
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<-- <link rel="icon" href="<%= BASE_URL %>favicon.ico">
<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.0.7/vue.global.prod.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue-router/4.0.5/vue-router.global.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script> !-->
<title>vue项目配置</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>