优化-CDN使用#
CDN定义 :内容分发网络,指的是一组分布在各个地区的服务器
作用:把静态资源文件/第三方库放在CDN网络中各个服务器中,供用户就近请求获取
好处:减轻自己服务器请求压力,就近请求物理延迟低,配套缓存策略
实测#
需求:开发模式使用 本地 第三方库,生产模式下使用 CDN加载 引入
步骤:
在public/index.html中引入所需第三方库并用模板语法判断
<head>
<!-- ... -->
<% if(htmlwebpackplugin.options.usecdn){ %>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/css/bootstrap.min.css" />
<% } %>
</head>
<body>
<% if(htmlWebpackPlugin.options.useCdn){ %>
<script> src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.min.js"></script>
<script> src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.3/js/bootstrap.min.js"></script>
<% } %>
</body>%>%>
webpack.config.js配置externals外部扩展选项
const config={
// ...
plugins: [
new HtmlWebpackPlugin({
// ...
useCdn: process.env.NODE_ENV === 'production', // 生产模式下使用cdn引入的地址
}),
]
}
// 生产环境下使用相关的配置
if (process.env.NODE_ENV === 'production') {
// 外部扩展(让webpack防止import的包被打包进来)
config.externals = {
// key:import from 语句后面的字符串
// value:留在原地的全局变量(最好和cdn在全局暴露的变量一致)
'bootstrap/dist/css/bootstrap.min.css': 'bootstrap',
axios: 'axios',
};
}
打包观察效果
开发环境下:
生产环境下:
满足要求,开发模式使用本地下载第三方库,生产模式使用第三方库CDN