vue專案打包過大,使用cdn優化
一、在vue.config.js新增,如果沒有則新建
// 是否為生產環境
const isProduction = process.env.NODE_ENV !== "development";
// 本地環境是否需要使用cdn
const devNeedCdn = false;
const cdn = {
// cdn:模組名稱和模組作用域命名(對應window裡面掛載的變數名稱)
externals: {
vue: "Vue",
vuex: "Vuex",
"vue-router": "VueRouter",
axios: "axios",
vant: "vant",
},
// cdn的css連結
css: ["https://cdn.jsdelivr.net/npm/vant@2.10/lib/index.css"],
// cdn的js連結
js: [
"https://cdn.jsdelivr.net/npm/vue@2.6/dist/vue.min.js",
"https://cdn.jsdelivr.net/npm/vuex@3.5.1/dist/vuex.min.js",
"https://cdn.jsdelivr.net/npm/vue-router@3.4.9/dist/vue-router.min.js",
"https://cdn.jsdelivr.net/npm/vant@2.10/lib/vant.min.js",
"https://cdn.jsdelivr.net/npm/axios@0.21.0/dist/axios.min.js",
],
};
module.exports = {
lintOnSave: false,
configureWebpack: (config) => {
return {
// 用cdn方式引入,則構建時要忽略相關資源
externals: cdn.externals,
//if (isProduction || devNeedCdn) {config.externals = cdn.externals}
};
},
//打包忽略第三方庫
publicPath: "./",
chainWebpack: (config) => {
// ============注入cdn start============
config.plugin("html").tap((args) => {
// 生產環境或本地需要cdn時,才注入cdn
if (isProduction || devNeedCdn) args[0].cdn = cdn;
return args;
});
// ============注入cdn start============
//修改檔案引入自定義路徑
config.resolve.alias
.set("@", resolve("src"))
.set("_api", resolve("src/api"));
},
};
二、package.json修改
在package.json下修改(用到的cdn連結的,下面刪除,註釋會報錯)
"dependencies": {
"compression-webpack-plugin": "^3.1.0",
"core-js": "^3.6.4",
"exif-js": "^2.3.0",
"lib-flexible": "^0.3.2",
"postcss-plugin-px2rem": "^0.8.1",
"qs": "^6.9.1"
// "axios": "^0.19.2",
// "vant": "^2.5.2",
// "vue": "^2.6.11",
// "vue-router": "^3.1.5",
// "vuex": "^3.1.2"
},
四、inde.html檔案
<html lang="en" style="width: 100%;height: 100%;">
<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">
<!-- 使用CDN的CSS檔案 -->
<% for (var i in htmlWebpackPlugin.options.cdn &&
htmlWebpackPlugin.options.cdn.css) { %>
<link
href="<%= htmlWebpackPlugin.options.cdn.css[i] %>"
rel="stylesheet"
/>
<% } %>
<!-- 使用CDN的CSS檔案 -->
<title>CoolDream</title>
</head>
<body style="width: 100%;height: 100%;">
<noscript>
<strong>We're sorry but blog doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- 使用CDN的JS檔案 -->
<% for (var i in htmlWebpackPlugin.options.cdn &&
htmlWebpackPlugin.options.cdn.js) { %>
<script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
<% } %>
<!-- 使用CDN的JS檔案 -->
</body>
</html>
五、壓縮檔案
1.安裝
```javascript
npm i
compression-webpack-plugin -S
2.程式碼
```javascript
const CompressionPlugin = require("compression-webpack-plugin");
...
configureWebpack: (config) => {
return {
plugins: [
new CompressionPlugin({
test: /\.js$|\.html$|.\css/, //匹配檔名
threshold: 10240, //對超過10k的資料壓縮
deleteOriginalAssets: false, //不刪除原始檔
minRatio: 0.8,
}),
],
};
},
六、完整吃vue.config.js程式碼
```css
const path = require("path");
function resolve(dir) {
return path.join(__dirname, dir);
}
const CompressionPlugin = require("compression-webpack-plugin");
// 是否為生產環境
const isProduction = process.env.NODE_ENV !== "development";
// 本地環境是否需要使用cdn
const devNeedCdn = false;
const cdn = {
// cdn:模組名稱和模組作用域命名(對應window裡面掛載的變數名稱)
externals: {
vue: "Vue",
vuex: "Vuex",
"vue-router": "VueRouter",
axios: "axios",
vant: "vant",
},
// cdn的css連結
css: ["https://cdn.jsdelivr.net/npm/vant@2.10/lib/index.css"],
// cdn的js連結
js: [
"https://cdn.jsdelivr.net/npm/vue@2.6/dist/vue.min.js",
"https://cdn.jsdelivr.net/npm/vuex@3.5.1/dist/vuex.min.js",
"https://cdn.jsdelivr.net/npm/vue-router@3.4.9/dist/vue-router.min.js",
"https://cdn.jsdelivr.net/npm/vant@2.10/lib/vant.min.js",
"https://cdn.jsdelivr.net/npm/axios@0.21.0/dist/axios.min.js",
],
};
module.exports = {
lintOnSave: false,
configureWebpack: (config) => {
return {
plugins: [
new CompressionPlugin({
test: /\.js$|\.html$|.\css/, //匹配檔名
threshold: 10240, //對超過10k的資料壓縮
deleteOriginalAssets: false, //不刪除原始檔
minRatio: 0.8,
}),
],
// 用cdn方式引入,則構建時要忽略相關資源
externals: cdn.externals,
//if (isProduction || devNeedCdn) {config.externals = cdn.externals}
};
},
//打包忽略第三方庫
publicPath: "./",
chainWebpack: (config) => {
// ============注入cdn start============
config.plugin("html").tap((args) => {
// 生產環境或本地需要cdn時,才注入cdn
if (isProduction || devNeedCdn) args[0].cdn = cdn;
return args;
});
// ============注入cdn start============
//修改檔案引入自定義路徑
config.resolve.alias
.set("@", resolve("src"))
.set("_api", resolve("src/api"));
},
transpileDependencies: [
/[/\\]node_modules[/\\]test[/\\]/,
/[/\\]node_modules[/\\][@\\]test2[/\\]test3[/\\]/,
],
devServer: {
port: 8085,
disableHostCheck: true,
proxy: {
"/api": {
target: "http://xxx", //API伺服器的地址
changeOrigin: true,
pathRewrite: {
"^/api": "",
},
},
"/fp": {
target: "http://xxx", //API伺服器的地址
changeOrigin: true,
pathRewrite: {
"^/fp": "",
},
},
},
},
};
相關文章
- Vue SPA 專案webpack打包優化指南VueWeb優化
- Vue專案優化打包——前端加分項Vue優化前端
- 【Vue專案總結】webpack常規打包優化方案VueWeb優化
- Vue專案上線前的優化以及專案打包上線流程Vue優化
- 前端架構師必備之Vue專案打包優化前端架構Vue優化
- VUE打包優化Vue優化
- vue 打包優化Vue優化
- Vue專案優化Vue優化
- Vue CLI 2&3 下的專案優化實踐 —— CDN + Gzip + PrerenderVue優化
- vue專案初次優化Vue優化
- Webpack + Vue 多頁面專案升級 Webpack 4 以及打包優化WebVue優化
- electron打包vue專案Vue
- 使用webpack.require優化vue專案的路由WebUI優化Vue路由
- Vue專案架構優化Vue架構優化
- 一次vue-cli 2.x專案打包優化經歷(優化xlsx外掛)Vue優化
- 使用jenkins一鍵打包釋出vue專案JenkinsVue
- Vue打包優化之code splitingVue優化
- Vue SPA專案優化小記Vue優化
- Vue專案上線環境部署,專案優化策略,生成打包報告,及上線相關配置Vue優化
- Vue專案打包到django部署VueDjango
- 不備案網站 + cdn 優化網站優化
- Laravel 專案深度優化過程Laravel優化
- Vue 專案效能優化 — 實踐指南Vue優化
- 深入淺出 webpack(vue 專案優化)WebVue優化
- Electron系列 -- vue專案打包成.exe檔案(透過官方demo的方式)Vue
- vue面試題之vue專案的優化方案Vue面試題優化
- vue 專案打包成apk(Hbuilder方案)VueAPKUI
- Vue專案如何分環境打包Vue
- 更優雅的使用 Parcel 進行前端專案的打包前端
- 在vue專案中優雅的使用SvgVueSVG
- vue專案打包:npm run build 程式卡死VueNPMUI
- Vue專案打包常見問題整理Vue
- 記一次 VUE 專案優化實踐Vue優化
- 如何優化我們的程式碼(vue專案)優化Vue
- Vue-cli3.0的打包效能優化方案Vue優化
- 關於vue的webpack打包優化問題VueWeb優化
- vue專案國際化 vue-i18n 使用Vue
- 如何在vue專案中優雅的使用SVGVueSVG