You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DeprecationWarning: Tapable.plugin is deprecated. Use new API on '.hooks' instead
这个错误会发生在你使用的 plugin 没有 update 或者没有针对 webpack 4.x 做特殊处理的时候。
这个时候只能去 github 提 issue 或者换一个 plugin 了。
小剧场
项目经理:我们要开始一个新的项目,裤裆你来负责项目构建吧。
我:好的没问题,经理请稍等。
我:好了,我们开始吧。
项目经理:接下来呢?
我:接下来没了,可以开发了。
项目经理:裤裆啊,速度快是好事,但是我看你每次都是那么几步,能不能来点不一样的,你看那些面试官,面试手写一个
webpack 4.x
的配置,你知道怎么写么?我:。。。。。。
项目经理:(拂袖而去,远远地听到空中传来一句话)年轻人,切勿急躁,稳中求胜啊。
我:项目急的时候你不是这么说的。
项目经理:裤裆你说啥?
我:经理你说得对。
前言
在我们在面对一个新的项目的时候,网上的大量优秀的模板可以使我们少走很多弯路,可以把主要的精力放在业务上,等到后期项目庞大了,业务复杂了的时候再去做一些优化,这其中包括项目打包速度优化,项目打包体积优化(也可以看做是首屏加载优化),等等,但是,身为一个爱折腾的程序猿,面对这些模板,是的,我很好奇!
花了四五天的时间,看源码,查资料,搭建项目跑测试,终于对于手写一个
webpack
配置有了一些心得,不敢私藏,同时也是响应开源思想,将我知道的分享出来,希望可以给同样想更深一步了解webpack
这个神器的大家一些帮助。在这篇博客我会介绍
webpack 4.x
中的一些新的东西,因为参考的是vue-cli webpack
的模板,所以会着重介绍这个模板里面用的插件,最后的目的是搭建一个基础的webpack 4.x
项目脚手架,俗话说,基础不牢,地动山摇,希望可以帮助大家对于经常使用的模板有更深的了解。当然,文章开始之前,附上该项目的地址,github@jsjzh,所有的代码我都加上了注释,希望大家看完之后可以有所收获,最好能赏个
star
啦!=3=webpack 4.x
的那些新玩意儿在最新的 官方文档 中,发现了两个新的配置项,
mode
和optimization
,号称是零配置的webpack 4.x
在设置了mode
之后,的确减少了我们很多麻烦。可以这么说,新增的
optimization
选项就是mode
配置的体现实施者。下面会介绍因为你配置了不同的
mode
之后,你的代码会受到的不同对待。mode
配置之后这个配置项是区分
webpack 4.x
和其他版本最明显之处,既然他这么突出,那肯定是要抓来好好研究研究的。三个选值,
production | development | none
,我这里挑前两个说说。production
development
那些相同的这里的配置是
mode
为production
development
时候都默认相同的。optimization.removeAvailableModules
webpack
跳过在 子模块 中对 A模块 的检索,这可以加快打包速度。optimization.removeEmptyChunks
webpack
将会不会去打包一个空的模块。optimization.mergeDuplicateChunks
webpack
合并一些包含了相同模块的模块。optimization.nodeEnv
process.env.NODE_ENV
中传入当前的mode
环境。production
development
那些不同的production
performance:{hints:"error"....}
optimization.flagIncludedChunks
webpack
确定和标记块,这些块是其他块的子集,当更大的块已经被加载时,不需要加载这些子集。optimization.occurrenceOrder
webpack
找出一个模块的顺序,这将导致最小的初始bundle。optimization.usedExports
optimization.concatenateModules
webpack
查找可以安全地连接到单个模块的模块图的片段。取决于优化。optimization.minimize
UglifyjsWebpackPlugin
进行代码压缩。development
devtool:eval
source map
的格式选择。cache
module.unsafeCache
output.pathinfo
bundle
中引入项目所包含模块的注释信息。optimization.providedExports
optimization.splitChunks
chunk
中共享的模块,取出来生成单独的chunk
。CommonsChunkPlugin
插件。optimization.runtimeChunk
webpack
运行时代码创建单独的chunk
。optimization.noEmitOnErrors
optimization.namedModules
optimization.namedChunks
chunk
更有意义更方便调试的名称。webpack 4.x
基础版开发环境详细配置纯手工写一个
webpack
的配置,首先我们需要基础的项目目录结构,这里参考了 vue-cli webpack 的目录结构,将build
和config
分开管理。多的咱不说了,先来一记组合拳
创建基础的项目目录
接着可以参考我的目录结构(列出主要的文件,只针对
dev
环境)安装所需依赖,这里为了区分类别,没有将
install
依赖放在一起,下面有放在一起的版本,可以直接复制使用。安装所需依赖的全套版本(若已经执行过上个操作这里就可以跳过)。
package.json
中的devDependencies
各位看官莫慌,且听我介绍一下我们都安装了些啥玩意儿。
webapck webpack-cli
webpack-dev-server
webpack-dev-server
=express
+webapck-dev-middleware
+webpack-hot-middleware
+connect-history-api-fallback
+opn
+ ...express
webapck-dev-middleware
webpack-hot-middleware
webpack-dev-middleware
配合使用。connect-history-api-fallback
HTML5
的history
模式的页面,这可以帮助资源定位,不出现 404 错误,具体的在下面的配置详解中。opn
webapck-merge
webpack
配置的,一般我们会把webpack
的base
配置和dev
配置 和prod
配置分开写,用这个工具就可以很方便的合并base
和dev
的配置。friendly-errors-webpack-plugin
html-webpack-plugin
html
文件,并且可以在底部注入通过webpack
打包好的bundle.js
文件。portfinder
package.json
中的scripts
接着,安装完了依赖我们需要配置
npm
运行时候的脚本了。build/webpack.base.conf.js
配置详解build/webpack.dev.conf.js
配置详解build/build-server.js
配置详解编译出错了?看看这里
如果你发现直接在控制台执行
webpack
报错了,但是你确实执行了npm install
,那是因为你没有安装全局的webpack。
我们有两个办法解决,而不用去安装全局的
webpack。
.\node_modules\.bin\webpack --config webpack.config.js
node_modules
下的webpack
package.json
配置让npm
自己去找该项目中的webpack
package.json > scripts.build: webapck
DeprecationWarning: Tapable.plugin is deprecated. Use new API on '.hooks' instead
这个错误会发生在你使用的
plugin
没有update
或者没有针对webpack 4.x
做特殊处理的时候。这个时候只能去
github
提issue
或者换一个plugin
了。后语
希望自己所做的一些微小的事情可以帮助大家在漫漫前端路中更上一层楼,另外,周末了不要太沉迷于敲代码,多出去走走,散散步,运动运动,给自己的一周充实的大脑放个空。
如果大家觉得我哪里写的不对,请不要犹豫,直接 diss 我 =3=
代码如人生,我甘之如饴。
我在这里 gayhub@jsjzh 欢迎来找我玩儿
大纲
webpack 4.x
的那些新玩意儿(DONE)mode
optimization
webpack 4.x
基础版开发环境详细配置(DONE)package.json
中的devDependencies
package.json
中的scripts
build/webpack.base.conf.js
配置详解build/webpack.dev.conf.js
配置详解build/build-server.js
配置详解webpack 4.x
升级版开发环境详细配置(TODO)[分篇]babel
转换ES6
语法img
转为dataURL
css
vue-loader
或其他loader
来完成更多webpack-plugin
webpack 4.x
生产环境详细配置(TODO)[分篇]webpack
配置优化(TODO)[分篇]The text was updated successfully, but these errors were encountered: