14-生产环境配置缓存

从2方面进行缓存
babel 和 资源
开发环境中用的是style-loader 和 HMR
生产中不能用上述两种,因为HMR是基于devServer的,style-loader要被插件替换
一、babel处理:开启babel缓存
让第二次打包构建速度更快

                    {
                        ...commonJsLoader,
                        loader:'babel-loader',
                        options:{
                            presets:[
                                [
                                    '@babel/preset-env',
                                    {
                                        useBuiltIns:'usage',
                                        corejs:{
                                            version:3
                                        },
                                        targets:{
                                            'chrome':50
                                        }
                                    }
                                ]
                            ],
                            //开启babel缓存,
                            //第二次构建才会读取缓存,速度更快
                            cacheDirectory:true
                        }
                    },

二、资源缓存,文件名上加hash值
让代码上线缓存更好使用
hash:每次webpack构建后,生成的唯一hash值
问题:因为js和css同时使用一个hash值,如果重新打包,会导致所有缓存失效(我确只改动了js文件,没改css文件)
可以应用的图片和字体上
chunkhash:根据chunk生成的hash值,如果打包生成同一个chunk,hash值就一样。一个入口文件生成一个chunk,如果这个chunk内没有代码更改,多次打包hash一致
不能应用在图片和字体上
contenthash:根据文件的内容生成hash,不同的文件hash值一定不一样,并且如果1个文件内容没有变,打包多少次hash值都不变。
可以应用的图片和字体上

启动服务,建立与src同级别的server.js 用node server.js启动服务
server.js代码如下

/**
 * 服务器代码
 * 启动服务器2中方式
 * nodemon server.js (需要全局安装 npm i nodemon -g)
 * 
 * node server.js
 * 
 * 访问服务器地址:http://localhost:3000
 */
const express = require("express");

const app = express();

//缓存1小时
app.use( express.static('build', {maxAge:1000*3600}))

app.listen(3000)

查看nextwork从缓存读取


image.png

缓存1小时


image.png

缓存造成的问题:更新文件,刷新网页不更新
解决:输出的文件名字增加hash值

1、filename:'js/out.[hash:10].js',
2、filename:'css/h.[hash:10].css'

解决:输出的文件名字增加chunkhash值

真正解决:输出的文件名字增加contenthash值

你可能感兴趣的:(14-生产环境配置缓存)