当本身在学习webpack的时候,在网上发现中文的很详细的教程不多,因而便想将本身学习webpack的笔记记录整理下来,便有了这篇文章,但愿对你们有所帮助,若是有错误,欢迎你们指出。css
在使用webpack的项目中,默认配置文件为webpack.config.js
, 模块文件,和Node写法同样,对外暴露接口,主要属性有:html
模块系统的几种类型react
<script>
标签类型webpack
CommonJsgit
优势github
缺点web
AMD正则表达式
优势npm
ES6json
优势
缺点
模块要可以在客户端中去执行,则必须将它们从 server => browser
极端的想法:
分块转换的想法:
webpack它能将依赖的模块转化成能够表明这些包的静态文件
它的目标有
咱们知道,对于浏览器来讲,加载的资源越少,响应的速度也就越快,因此有时候咱们为了优化浏览器的性能,会尽量的将资源合并到一个主文件app.js
里面。可是这致使的很大的缺点:
而webpack能够很好的解决以上缺点,由于它是一个十分聪明的模块打包系统,当你正确配置后,它会比你想象中的更强大,更优秀。
咱们能够直接使用npm进行全局安装
npm install webpack -g
在常规项目中把webpack依赖加入到package.json
npm init
npm install webpack --save
更详尽的安装方法个能够参考webpack安装
启动
webpack
若是你想当改变一个文件而让webpack实时编译
webpack --watch
若是你想把默认的配置文件webpack.config.js
改为自定义文件
webpack --config customconfig.js
首先先贴上一个比较完整的webpack.config.js
的代码,再详细介绍:
// webpack.config.js var path = require('path') var webpack = require('webpack') module.exports = { entry: ['./src/index'], output: { path: path.join(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, }, }), new webpack.optimize.OccurenceOrderPlugin() ], module: { loaders: [{ test: /\.css$/, loaders: ['style', 'css'] }] } }
就像我在前面提到的,webpack.config.js
的写法和在Node里的写法相同,咱们主要看的就是文件中的module.exports
里面的内容
output是指输出文件的配置项
plugins 顾名思义,使用插件能够给webpack添加更多的功能,使webpack更加的灵活和强大,webpack有两种类型的插件:
webpack内置的插件
// 首先要先安装webpack模块 var webpack = require("webpack"); module.exports = { new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, }, }) };
webpack外置插件
好比:
//npm install component-webpack-plugin 先要在安装该模版 var ComponentPlugin = require("component-webpack-plugin"); module.exports = { plugins: [ new ComponentPlugin() ] }
更多的插件以及插件的用法,你们能够到webpack的插件上查看。
module 配置处理文件的选项
loaders 一个含有wepback中能处理不一样文件的加载器的数组
loaders 的安装方法
$ npm install xxx-loader --save-dev
讲到这里,我相信你们都会对wepback有了更深的认识,可是却十分的松散,不能把它们串起来,那接下来我就用几个小的demo来让你们梳理梳理起来
首先请你们创建一个和我同样文件结构的文件夹,在这里我也说明下这个demo大概要作的事情,就是将css文件都打包放到一个js文件,而且对图片解压,而且要对这个js文件进行自动压缩。
DemoOne |- dist |- src |- index.js |- index.html |- style.css |- demo.png(随便找一张图片就能够) |- package.json |- webpack.config.js
首先看index.html
代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo1</title> </head> <body> <div>Hello,world</div> <img src="./demo.png" alt=""> <script src="../dist/bundlle.js"></script> </body> </html>
再看style.css
body{ background:red; }
这个时候咱们尚未写webpack.config.js
,打开index.html
,会看到
接下来,咱们在webpack.config.js
下加上以下代码
// webpack.config.js var path = require('path') var webpack = require('webpack'); module.exports = { entry: ['./src/index'], output: { path: path.join(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, }, }) ], module: { loaders: [{ test: /\.css$/, loaders: ['style', 'css'] }, { test: /\.(png|jpg)$/, loaders: [ 'file?hash=sha512&digest=hex&name=[hash].[ext]', 'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false' ] }] } }
固然,在开始用webpack以前,要先安装相对应的模块,解析css文件 图片文件以及由于要对文件进行压缩,因此也要用到上文中所说的webpack自身内置的插件,因此也要导入webpack模块
$ npm install style-loader css-loader image-webpack-loader webpack --save-dev
可是这个时候你打开浏览器会发现,页面依旧没有什么效果,这是确定的!我想你们确定知道下一步该怎么作了,没错!在入口文件里面增长内容
require('./style.css'); require('./demo.png');
再运行webpack
,出现上图相似提示后,打开浏览器,你会发现变成了这个样子
而且在dist
文件夹内,多出了两个文件,一个f1341ce5ea165e06ec3358441b52d5ea.png
(随机产生的名字)若是你想得到这个名字,能够将require('./demo.png')
输出查看,以及还有bundle.js
,比较图片先后的大小,
能够发现,文件大小发生了改变。打开bundle.js
你会发现该文件也被压缩了。是否是感受很神奇?! 还有一个比较好玩的插件htmlwebpackplugin能够点击这里看看,把上面的例子改变下哦。
我相信看到这里你对webpack
必定有了必定的认识,其实webpack
还有不少强大的功能,好比,webpack-dev-server
能够自动生成一个小型的NodeJs Express
服务器从而实现webpack十分实用的功能热替换(HMR) 和其它的工具gulp
grunt
等一块儿使用。。。最后值得一提的是react
和webpack
是一对绝佳cp啊,有木有!!