入口文件
entry: './index.js'entry: ['./index.js', './other.js']entry: {main: './index.js', other: './other.js'}
第三种对象模式需要指定多出口
1 | output: { |
三种hash
hash是打包后的该版本的hash,
chunkhash是对应每个chunk的hash
- contenthash是针对内容改变(适用被引用的css文件)
用chunkhash而不是hash来生成打包文件的目的是:使用浏览器缓存。比如
index.js引用了a.js和b.js和styles.css,如果只改了index.js而不改变其他的文件,其他3个文件原本可以用浏览器的缓存防止重新加载新的一样的文件,如果用hash每次打包重新生成一个新的就要重新下载新的这3个文件。
Webpack-dev-server
package.json中的scripts属性里填写 npx webpack-dev-server
webpack.config.js中的devServer属性是个对象,属性有port、hot、open、contentBase、progress,proxy等
- Package.json中运行了
npx webpack-dev-server后就可以在内存中存放输出的index.html和js等不会在dist中生成 - 热更新
hot:本地保存后自动刷新页面,不需要手动刷新。 - 热模块更新hmr,适用于css:改变样式后页面局部(模块)刷新,可以保留其他状态
- 代理
proxy: 对象,防止跨域。键是代理的请求相对路径比如’/api/info’,值也是对象,其键target的值是代理的地址,比如’http://localhost:9092'
按需加载
代码中使用import(‘XXX’)的方式会按需加载,打包的时候会多出一个0.js
module
包含rules对象
babel:babel-loader只与webpack桥接,放到use属性的loader属性里、@babel/babel-core核心库,装了它才可以使用preset-env、@babel/preset-env各种新es特性转换为es5,放到use属性的options属性的presets属性里。
通过上⾯的⼏步 还不够,默认的Babel只⽀持let等⼀些基础的特性转换,Promise等⼀些还有转换过来,这时候需要借助@babel/polyfill,把es的新特性都装进来,来弥补低版本浏览器中缺失的特性
useBuiltIns 选项是 babel 7 的新功能,这个选项告诉 babel 如何配置 @babel/polyfill 。 它有三个参数可以使⽤: ①entry: 需要在 webpack 的⼊⼝⽂件⾥ import “@babel/polyfill” ⼀次。 babel会根据你的使⽤情况导⼊垫⽚,没有使⽤的功能不会被导⼊相应的垫⽚。因为是导入会造成污染全局 ②usage(试验阶段): 不需要 import ,全⾃动检测,但是要安装@babel/polyfill 。类似@babel/plugin-transform-runtime ,不会造成全局污染。
plugins
常用插件:HtmlWebpackPlugin、CleanWebpackPlugin、webpack.HotModuleReplacementPlugin
optimization
optimize-css-assets-webpack-plugin、terser-webpack-plugin