标签:images ati top lazyload 提取 引入 载器 prefix import
众所周知,webpack进入第4个大版本已经有2个月的时间了,而且webpack团队升级更新的速度也是非常的惊人
在写下如下内容的时候webpack已经出到了4.6的版本了,剑指5.0应该是指日可待了,当然这些都是个人的臆想,并不代表任何意见
既然我们已经迎接了webpack4的到来了,那么就一起来使用一下,即使你没用过之前的版本,没关系,我们重新出发,将工作中常用到的配置写给大家来看
非友情提示:由于webpack使用起来并不能仅看代码就方便理解,所以有图有真相的才是正解,于是乎本文配图很多,真的是很多
首先,既来之,则安之
★ npm i -D 是 npm install --save-dev 的简写,是指安装模块并保存到 package.json 的 devDependencies中,主要在开发环境中的依赖包
webpack4可以支持0配置打包,这里所说的0配置又是什么呢?当然在开发者眼中0配置的东西,那根本是无法用的,因为不够智能,那么我们就来看看做到了哪些0配置
在使用webpack进行打包的时候,默认情况下会将src下的入口文件(index.js)进行打包
当执行npx webpack命令的时候,webpack会自动查找项目中src目录下的index.js文件,然后进行打包,生成一个dist目录并存在一个打包好的main.js文件
这些算是0配置的操作了,名字都是定义好的,不能变,想想也很鸡肋
webpack的使用还是在我们的配置方面,下面就进入我们的常规操作环节
在项目下创建一个webpack.config.js(默认,可修改)文件来配置webpack
以上就是webpack的正常配置模块
★ 启动devServer需要安装一下webpack-dev-server
npm i webpack-dev-server -D
按照项目的结构,我们就从0开始去写一下配置吧
上面就可以说是实现了最简单的webpack配置了,那接下来就打包一下看看
工作当中我们打包编译的时候一般都执行npm run dev这样的命令,既然是通过npm执行的命令,我们就应该找到package.json里的执行脚本去配置一下命令,这里如下图所示
npm run build就是我们打包后的文件,这是生产环境下,上线需要的文件
npm run dev是我们开发环境下打包的文件,当然由于devServer帮我们把文件放到内存中了,所以并不会输出打包后的dist文件夹
通过npm run build之后会生成一个dist目录文件夹,就和上面打包后的样子一样了
多个入口可以有两种实现方式进行打包
这时候执行npm run build后,会生成打包好的两个js文件,如图所示
文件都打包好了,但是我们在使用的时候不能在dist目录下去创建一个html文件,然后去引用打包后的js吧,这不合理,实际开发中也不会这样
我们需要实现html打包功能,可以通过一个模板实现打包出引用好路径的html来
这就需要用到一个常用的插件了,html-webpack-plugin,用之前我们来安一下它
npm i html-webpack-plugin -D
因为是个插件,所以需要在config.js里引用一下的
通过上面的配置后,我们再npm run build打包看一下现在是个什么样子了
如果开发的时候不只一个页面,我们需要配置多页面,那么需要怎么来搞呢?不用担心,html-webpack-plugin插件自有办法,我们来观望一下
继续npm run build看打包后的样子
上面基本介绍完了html和js的打包配置了,现在我们还缺一个好兄弟css,webpack对css的解析需要用到loader,所以我们先提前安装好,待会好方便使用
可以在src/index.js里引入css文件,到时候直接打包到生产目录下
需要下载一些解析css样式的loader
下面我们来看一下如何配置css文件的解析
此时拆分完css后,打包的html页面就以link的方式去引入css了,这样很好
npm i file-loader url-loader -D
如果是在css文件里引入的如背景图之类的图片,就需要指定一下相对路径
在css中指定了publicPath路径这样就可以根据相对路径引用到图片资源了,如下图所示
页面中经常会用到img标签,img引用的图片地址也需要一个loader来帮我们处理好
npm i html-withimg-loader -D
这样再打包后的html文件下img就可以正常引用图片路径了
字体图标和svg图片都可以通过file-loader来解析
这样即使样式中引入了这类格式的图标或者图片都没有问题了,img如果也引用svg格式的话,配合上面写好的html-withimg-loader就都没有问题了
通过postcss中的autoprefixer可以实现将CSS3中的一些需要兼容写法的属性添加响应的前缀,这样省去我们不少的时间
由于也是一个loader加载器,我们也需要先安装一下
npm i postcss-loader autoprefixer -D
安装后,我们还需要像webpack一样写一个config的配置文件,在项目根目录下创建一个postcss.config.js文件,配置如下:
然后在webpack里配置postcss-loader
在实际开发中,我们在大量的使用着ES6及之后的api去写代码,这样会提高我们写代码的速度,不过由于低版本浏览器的存在,不得不需要转换成兼容的代码,于是就有了常用的Babel了
Babel会将ES6的代码转成ES5的代码
那么不再多说,既然要使用它,就先来安一下
npm i babel-core babel-loader babel-preset-env babel-preset-stage-0 -D
当把这些都安好后,我们就开始配置,由于要兼容的代码不仅仅包含ES6还有之后的版本和那些仅仅是草案的内容,所以我们可以通过一个.babelrc文件来配置一下,对这些版本的支持
我们再在webpack里配置一下babel-loader既可以做到代码转成ES5了
在我们每次npm run build的时候都会在dist目录下创建很多打好的包,如果积累过多可能也会混乱
所以应该在每次打包之前将dist目录下的文件都清空,然后再把打好包的文件放进去
这里提供一个clean-webpack-plugin插件
npm i clean-webpack-plugin -D
启动一个静态服务器,默认会自动刷新,就是说你对html,css,js文件做了修改并保存后,浏览器会默认刷新一次展现修改后的效果
正常情况下我们都是在开发环境中开发项目,所以之前配置的脚本"dev"可以派上用场了,在执行npm run dev命令后,会启动静态服务器,我们访问localhost:3000端口就可以看到开发的页面内容了
如果devServer里open设为true后,会自动打开浏览器
当然在npm run dev命令下,打包的文件存在于内存中,并不会产生在dist目录下
在配置devServer的时候,如果hot为true,就代表开启了热更新
But这并没那么简单,因为热更新还需要配置一个webpack自带的插件并且还要在主要js文件里检查是否有module.hot
下面就让我们直接看下代码是如何实现的
以上index.js中的内容,如果将变量a的值进行修改保存后,会在不刷新页面的情况下直接修改掉,这样就实现了热更新
那么热更新从现在看来和自动刷新浏览器的区别也不是太大嘛!自动刷新也是可以接受的啊
其实不然,热更新的好处可能在vue或者react中有更大的发挥,其中某一个组件被修改的时候就会针对这个组件进行热更新了,这里用到vue或react的同学去实际体验一下吧
在webpack的配置中,resolve我们常用来配置别名和省略后缀名
这个配置在webpack中比较简单,我们也就不再叙述了,下面来看点干货
在webpack4之前,提取公共代码都是通过一个叫CommonsChunkPlugin的插件来办到的。到了4以后,内置了一个一模一样的功能,而且起了一个好听的名字叫“优化”
下面我们就来看看如何提取公共代码
那么他们两个js中其中公共部分的代码就是jquery和utils里的代码了
可以针对第三方插件和写好的公共文件
通过以上配置,可以把引入到a.js和b.js中的这部分公共代码提取出来,如下图所示
在package.json的脚步里,我们可以配置调用不同的webpack配置文件进行打包,举个栗子
这样的好处在于可以针对不同的需求进行一个特定的打包配置
关于webpack4的一些常规操作就说到这里了,其实在工作当中更多时候,也并不需要我们去配置这些内容
标签:images ati top lazyload 提取 引入 载器 prefix import
原文地址:https://www.cnblogs.com/fqh123/p/9535203.html