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頁(yè)面為例,生成兩個(gè)版本的前端文件:
版本1:
filename可規(guī)定index.html頁(yè)面需要引入的入口js文件名稱,第一個(gè)版本可為index.html頁(yè)面生成index_v1.js入口文件,index頁(yè)面內(nèi)其他的按需加載的文件可生成名稱為[模塊名].[hash].js。(hash在每次打包后會(huì)改變)。
這時(shí)候在index.html中的body內(nèi)應(yīng)該是
<body>
<div id="index"></div>
<script src="/js/index_v1.js"></script>
</body>
版本2:
版本2內(nèi)的index頁(yè)面入口文件為index_v2.js,其中其他文件為[模塊名].[hash].js
這時(shí)候在index.html中的body內(nèi)應(yīng)該是
<body>
<div id="index"></div>
<script src="/js/index_v2.js"></script>
</body>
兩次打包后的文件名稱完全不一樣,但是當(dāng)版本二部署后,瀏覽器加載index.html頁(yè)面后,在控制臺(tái)中顯示頁(yè)面引入的js文件依然是index_v1.js而不會(huì)加載index_v2.js。這時(shí)候如果刷新瀏覽器,那么加載的文件又變?yōu)閕ndex_v2.js。
以上就是當(dāng)前小小鄙人遇到的問(wèn)題。
這樣的理解應(yīng)該是對(duì)的,但是對(duì)于上述遇到的問(wèn)題,則讓我對(duì)這個(gè)理解產(chǎn)生懷疑。
瀏覽器的緩存可以通過(guò) cache-control,max-age,expires。。。,一些參數(shù)去設(shè)置,網(wǎng)上的一些講解也非常明白,對(duì)于參數(shù)的理解也不是很難,但是這些參數(shù)在實(shí)際應(yīng)用中確很少談及,這些參數(shù)在那里設(shè)置呢,在html文件的 meta 標(biāo)簽中設(shè)置,還是在服務(wù)器中設(shè)置?一直都找不到答案。另外又如何做到對(duì)單個(gè)圖片進(jìn)行緩存控制呢?
以上實(shí)際提出了兩個(gè)問(wèn)題:
望各位大神指點(diǎn)指點(diǎn),小白前端渴望得到你們答案,謝謝大家!
問(wèn)題1. 瀏覽器對(duì)文件的緩存為何會(huì)造成我這樣的問(wèn)題,文件名更改卻還會(huì)尋找上個(gè)版本的文件?
首先你要確定幾個(gè)情況
CommonsChunkPlugin么? 如果用了,CommonsChunkPlugin對(duì)應(yīng)的js文件必須要有hash,不然就會(huì)導(dǎo)致CommonsChunkPlugin的js文件訪問(wèn)的是緩存的文件,從而去訪問(wèn)老版本文件。為了更全面認(rèn)知問(wèn)題,最好還是把 webpack 配置全放上來(lái)
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。