Open cisen opened 5 years ago
webpack-dev-server实际上相当于启用了一个express的Http服务器+调用webpack-dev-middleware。它的作用主要是用来伺服资源文件。这个Http服务器和client使用了websocket通讯协议,原始文件作出改动后,webpack-dev-server会用webpack实时的编译,再用webpack-dev-middleware将webpack编译后文件会输出到内存中。适合纯前端项目,很难编写后端服务,进行整合。
webpack-dev-middleware输出的文件存在于内存中。你定义了 webpack.config,webpack 就能据此梳理出entry和output模块的关系脉络,而 webpack-dev-middleware 就在此基础上形成一个文件映射系统,每当应用程序请求一个文件,它匹配到了就把内存中缓存的对应结果以文件的格式返回给你,反之则进入到下一个中间件。
因为是内存型文件系统,所以重建速度非常快,很适合于开发阶段用作静态资源服务器;因为 webpack 可以把任何一种资源都当作是模块来处理,因此能向客户端反馈各种格式的资源,所以可以替代HTTP 服务器。事实上,大多数 webpack 用户用过的 webpack-dev-server 就是一个 express+webpack-dev-middleware 的实现。二者的区别仅在于 webpack-dev-server 是封装好的,除了 webpack.config 和命令行参数之外,很难去做定制型开发。而 webpack-dev-middleware 是中间件,可以编写自己的后端服务然后把它整合进来,相对而言比较灵活自由。
是一个结合webpack-dev-middleware使用的middleware,它可以实现浏览器的无刷新更新(hot reload),这也是webpack文档里常说的HMR(Hot Module Replacement)。HMR和热加载的区别是:热加载是刷新整个页面。
html-webpack-plugin
插件作用:生成html文件,并且引用相关的 assets 文件(如 css, js),给js添加hash,默认支持jade,ejs
title
生成html文件的标题
filename
就是html文件的文件名,默认是index.html
template
指定你生成的文件所依赖哪一个html文件模板,模板类型可以是html、jade、ejs等。但是要注意的是,如果想使用自定义的模板文件的时候,你需要安装对应的loader哦。 举例子:
如果你设置的 title 和 filename于模板中发生了冲突,那么以你的title 和 filename 的配置值为准。
inject
inject有四个值: true body head false
favicon
给你生成的html文件生成一个 favicon ,值是一个路径
然后再生成的html中就有了一个 link 标签
minify
使用minify会对生成的html文件进行压缩。默认是false。html-webpack-plugin内部集成了 html-minifier,因此,还可以对minify进行配置:(注意,虽然minify支持BooleanObject,但是不能直接这样写:minify: true , 这样会报错 ERROR in TypeError: Cannot use 'in' operator to search for 'html5' in true , 使用时候必须给定一个 { } 对象 )
cache
默认是true的,表示内容变化的时候生成一个新的文件。
showErrors
当webpack报错的时候,会把错误信息包裹再一个pre中,默认是true。
chunks
chunks主要用于多入口文件,当你有多个入口文件,那就回编译后生成多个打包后的文件,那么chunks 就能选择你要使用那些js文件
那么编译后:
如果你没有设置chunks选项,那么默认是全部显示。注意这里是选择你需要的chunks,把不需要的不要放进来。根据entry来定
excludeChunks
排除掉一些js
xhtml
一个布尔值,默认值是 false ,如果为 true ,则以兼容 xhtml 的模式引用文件。
chunksSortMode
script的顺序,默认四个选项: none auto dependency {function}
https://segmentfault.com/a/1190000013883242
webpack-dev-middleware
生成一个与webpack的compiler绑定的中间件,然后在express启动的服务app中调用这个中间件。 这个中间件的作用呢,简单总结为以下三点:通过watch mode,监听资源的变更,然后自动打包(如何实现,见下文详解);快速编译,走内存;返回中间件,支持express的use格式。特别注明:webpack明明可以用watch mode,可以实现一样的效果,但是为什么还需要这个中间件呢? 答案就是,第二点所提到的,采用了内存方式。如果,只依赖webpack的watch mode来监听文件变更,自动打包,每次变更,都将新文件打包到本地,就会很慢。
配置项
postcss-loader
插件作用:给不同浏览器的样式加上前缀,如-webkit-
webpack-hot-middleware
webpack-hot-middleware 是用来进行页面的热重载的,刷新浏览器 一般和 webpack-dev-middleware 配合使用,实现热加载功能。https://segmentfault.com/a/1190000011761345
使用
webpack
server
配置项都有:
path - 中间件为事件流提供的路径 name - 捆绑名称,专门用于多编译器模式 timeout - 尝试重新连接后断开连接后等待的时间 overlay - 设置为false禁用基于DOM的客户端覆盖。 reload - 设置为true在Webpack卡住时自动重新加载页面。 noInfo - 设置为true禁用信息控制台日志记录。 quiet - 设置为true禁用所有控制台日志记录。 dynamicPublicPath - 设置为true使用webpack publicPath作为前缀path。(我们可以webpack_public_path在入口点的运行时动态设置,参见output.- publicPath的注释) autoConnect - 设置为false用于防止从客户端自动打开连接到Webpack后端 - 如果需要使用该setOptionsAndConnect功能修改选项 通过传递第二个参数,可以将配置选项传递给中间件。
log - 用于记录行的函数,传递false到禁用。默认为console.log path - 中间件将服务事件流的路径必须与客户端设置相匹配 heartbeat - 多长时间将心跳更新发送到客户端以保持连接的活动。应小于客户的timeout设置 - 通常设置为其一半值。