- 19
- 0
前端文件在进行版本更迭时,会出现浏览器缓存造成的问题,具体描述为:
以下是我的webpack配置
module.exports = {
entry: {
dashboard: "./dev/CloudPlatform/index.js",
logIn: "./dev/CloudPlatform/login.js",
archives: "./dev/Archives/archives.js",
"404": "./dev/ERROR/404.js",
activateRP: "./dev/CloudPlatform/activateRP.js"
},
output: {
path: path.resolve(__dirname, "build/js"),
publicPath: "/js/",
chunkFilename: "[name].[hash].js",
filename: "[name]_v5.js"
},
externals: {
jquery: "$",
react: "React",
"react-dom": "ReactDOM",
"react-router": "ReactRouter"
},
plugins: [
new webpack.DefinePlugin({
"process.env.NODE_ENV": JSON.stringify("production")
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
drop_debugger: true,
drop_console: true
},
comments: false
})
],
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: "babel-loader",
options: {
presets: ["es2015", "react"],
plugins: [
"transform-object-rest-spread",
"transform-class-properties"
]
}
}
},
{
test: /\.css$/,
use: [
"style-loader",
{
loader: "css-loader",
options: {
importLoader: 1
}
},
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: loader => [
require("autoprefixer")({
browsers: [
">1%",
"last 4 versions",
"Firefox ESR",
"not ie < 9" // React doesn't support IE8 anyway
],
flexbox: "no-2009"
})
]
}
}
]
},
{
test: /\.less$/,
use: [
"style-loader",
"css-loader",
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: loader => [
require("autoprefixer")({
browsers: [
">1%",
"last 4 versions",
"Firefox ESR",
"not ie < 9" // React doesn't support IE8 anyway
],
flexbox: "no-2009"
})
]
}
},
"less-loader"
]
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
{
loader: "url-loader",
options: {
limit: 8192,
name: "../images/[name].[ext]"
}
},
{
loader: "image-webpack-loader",
options: {
progressive: true,
optimizationLevel: 7,
interlaced: false,
pngquant: {
quality: "65-90",
speed: 4
}
}
}
]
},
{
test: /\.(woff|woff2|svg|eot|ttf)\??.*$/,
use: [
{
loader: "file-loader",
options: {
name: "../font/[name].[ext]"
}
}
]
}
]
}
};
以index.html页面为例,生成两个版本的前端文件:
版本1:
filename可规定index.html页面需要引入的入口js文件名称,第一个版本可为index.html页面生成index_v1.js入口文件,index页面内其他的按需加载的文件可生成名称为[模块名].[hash].js。(hash在每次打包后会改变)。
这时候在index.html中的body内应该是
<body>
<div id="index"></div>
<script src="/js/index_v1.js"></script>
</body>
版本2:
版本2内的index页面入口文件为index_v2.js,其中其他文件为[模块名].[hash].js
这时候在index.html中的body内应该是
<body>
<div id="index"></div>
<script src="/js/index_v2.js"></script>
</body>
两次打包后的文件名称完全不一样,但是当版本二部署后,浏览器加载index.html页面后,在控制台中显示页面引入的js文件依然是index_v1.js而不会加载index_v2.js。这时候如果刷新浏览器,那么加载的文件又变为index_v2.js。
以上就是当前小小鄙人遇到的问题。
对于浏览器缓存的问题,鄙人有这么点理解,简单的说:
- 对于nginx中的文件,若文件名称不变,内容发生变化,这时候浏览器会使用缓存的文件,若文件名称发生改变,就是请求的url发生改变,相当于一个新的http请求,就会重新去请求文件。
这样的理解应该是对的,但是对于上述遇到的问题,则让我对这个理解产生怀疑。
另外对于图片缓存
浏览器的缓存可以通过 cache-control,max-age,expires。。。,一些参数去设置,网上的一些讲解也非常明白,对于参数的理解也不是很难,但是这些参数在实际应用中确很少谈及,这些参数在那里设置呢,在html文件的 meta 标签中设置,还是在服务器中设置?一直都找不到答案。另外又如何做到对单个图片进行缓存控制呢?
以上实际提出了两个问题:
- 浏览器对文件的缓存为何会造成我这样的问题,文件名更改却还会寻找上个版本的文件
- 浏览器缓存如何设置,图片缓存能单独设置吗?
望各位大神指点指点,小白前端渴望得到你们答案,谢谢大家!
- 共 0 条
- 全部回答
-
依舊悲傷落 普通会员 1楼
Webpack打包后的文件会被打包到dist目录下,浏览器会将dist目录下的文件缓存到用户的浏览器缓存中。
一般来说,浏览器的缓存是基于用户的设备和浏览器的特性进行的,不同设备和浏览器的缓存策略可能会有所不同。以下是一些常见的浏览器缓存策略:
-
URL 缓存:这是最常见的缓存策略,浏览器会把URL映射到文件的本地路径,用户下次访问该URL时,浏览器会从本地路径中读取文件。
-
请求缓存:当用户发送请求时,浏览器会将文件的URL和内容发送给服务器,服务器返回文件的URL和内容。浏览器会在服务器返回文件的URL后,将文件的内容缓存到用户的缓存中。
-
静态文件缓存:对于静态文件(如CSS、JavaScript、图片等),浏览器会将这些文件的URL和内容缓存到用户的缓存中。
如果你想让webpack打包后的文件不在浏览器的缓存中,可以使用
__webpack打包后的文件名作为URL。这样,浏览器就不再将文件的URL和内容发送给服务器,而是在服务器返回文件的URL后,浏览器直接从服务器的响应中读取文件的内容。另外,你也可以设置
--no-cache或者--no-cache-dir选项来清除浏览器的缓存,但请注意这会删除用户的缓存,所以不推荐在生产环境中使用。 -
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

