1、初始化,将你的控制台终端切换到某个目录下,执行命令
mkdir webpack_demo新建文件夹

cd webpack_demo切换到新建的文件夹

npm init初始化你的项目,这里会让你填一些基本信息,看着填就行

npm install –save-dev webpack安装webpack

2、建立相关目录
首先进入我们建立的webpack_demo目录(每个人建立的位置不同,可能建立在了D盘或者E盘)。
进入后在根目录建立两个文件夹,分别是src文件夹和dist文件夹:
src文件夹:用来存放我们编写的javascript代码,可以简单的理解为用JavaScript编写的模块。
dist文件夹:用来存放供浏览器读取的文件,这个是webpack打包成的文件。

文件夹建立好后,我们在dist文件下手动建立一个index.html文件,并写入下面的代码。
/dist/index.html

接下来在src文件夹下建立entery.js的文件,用于编写我们的JavaScript代码,也是我们的入口文件。
src/entery.js

3、打包
Webpack其实是可以在终端(命令行)中使用的,基本使用方法如下:
webpack {entry file} {destination for bundled file}
{entry file}:入口文件的路径,本文中就是src/entery.js的路径;
{destination for bundled file}:填写打包后存放的路径。
webpack src/entery.js dist/bundle.js

4、配置文件webpack.config.js

entry:配置入口文件的地址,可以是单一入口,也可以是多入口。
output:配置出口文件的地址,在webpack2.X版本后,支持多出口配置。
module:配置模块,主要是解析CSS和图片转换压缩等功能。
plugins:配置插件,根据你的需要配置不同功能的插件。
devServer:配置开发服务功能,后期我们会详细讲解。

执行webpack即可打包
//===========================================================
统一出口的配制方法

有时候可能我们想把不同的js文件输出到不同的目录,可能就需要用到下面的方法。

不同出口的配置方法1

不同出口的配置方法2

//以上两种都可以打包成功,但是在webpack-dev-server启动不了服务器,不知道为啥

========================================================================================//
5、设置webpack-dev-server
先用npm install webpack-dev-server –save-dev 来进行下载。下载好后,需要配置一下devServer。最简单的devServer配置项只有四个。先看一下代码,然后我再作解释。
/webpack.config.js

contentBase:配置服务器基本运行路径,用于找到程序打包地址。
host:服务运行地址,建议使用本机IP,这里为了讲解方便,所以用localhost。
compress:服务器端压缩选型,一般设置为开启,如果你对服务器压缩感兴趣,可以自行学习。
port:服务运行端口,建议不使用80,很容易被占用,这里使用了1234.
注意:这里需要使用npm 来进行安装webpack-dev-server了, 命令如下:

npm install webpack-dev-server –save-dev

在package.json里配置一下scripts选项就可以执行了。
/package.json

配置好保存后,在终端里输入 npm run server 打开服务器。然后在浏览器地址栏输入http://localhost:1234就可以看到结果了。
6、Loaders
Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因。通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理。

简单的举几个Loaders使用例子:
可以把SASS文件的写法转换成CSS,而不在使用其他转换工具。
可以把ES6或者ES7的代码,转换成大多浏览器兼容的JS代码。
可以把React中的JSX转换成JavaScript代码。
注意:所有的Loaders都需要在npm中单独进行安装,并在webpack.config.js里进行配置。下面我们对Loaders的配置型简单梳理一下。

test:用于匹配处理文件的扩展名的表达式,这个选项是必须进行配置的;
use:loader名称,就是你要使用模块的名称,这个选项也必须进行配置,否则报错;
include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选);
query:为loaders提供额外的设置选项(可选)。
明白了Loader是什么后,就开始这节课的正题,如何打包CSS文件。

loaders配置:

修改webpack.config.js中module属性中的配置代码如下:

webpack.config.js

loader的三种写法:
第一种写法:直接用use。

第二种写法:把use换成loader。

第三种写法:用use+loader的写法:

 

7、file-loader与url-loader

file-loader和url-loader的关系。简答地说,url-loader封装了file-loader。url-loader不依赖于file-loader,
即使用url-loader时,只需要安装url-loader即可,不需要安装file-loader,因为url-loader内置了file-loader。

url-loader工作分两种情况:
1.文件大小小于limit参数,url-loader将会把文件转为DataURL(Base64格式);
2.文件大小大于limit,url-loader会调用file-loader进行处理,参数也会直接传给file-loader。
也就是说,其实我们只安装一个url-loader就可以了。
file-loader:解决引用路径的问题,拿background样式用url引入背景图来说,我们都知道,webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的。这就会导致图片引入失败。这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于css),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件。
url-loader:如果图片较多,会发很多http请求,会降低页面性能。这个问题可以通过url-loader解决。url-loader会将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了。当然,如果图片较大,编码会消耗性能。因此url-loader提供了一个limit参数,小于limit字节的文件会被转为DataURl,大于limit的还会使用file-loader进行copy。
8、css与js分离之extract-text-webpack-plugin
安装:npm install –save-dev extract-text-webpack-plugin

引入:

配置plugins:

配置modules:

路径处理
在处理前,我们在webpack.config.js 上方声明一个对象,叫website。

然后在output选项中引用这个对象的publicPath属性。

 

9、js文件的转换处理,将es6的转为浏览器支持的es5语法,这里需同时安装多个依赖,我们一次性全部安装
npm install –save-dev babel-core babel-loader babel-preset-env babel-preset-react
在项目根目录新建.babelrc文件,并把配置写到文件里。

.babelrc

在webpack.config.js里添加loader配置

10、js文件的压缩处理
在webpack.config.js中引入uglifyjs-webpack-glugin插件

引入后在plugins配置里new一个 uglify对象就可以了

11、关于代码调试
在使用webpack时只要通过简单的devtool配置,webapck就会自动给我们生产source maps 文件,map文件是一种对应编译文件和源文件的方法,让我们调试起来更简单。
使用方法:
在webpack.config.js中的exports添加devtool: ‘eval-source-map’,如

四种选项
在配置devtool时,webpack给我们提供了四种选项。

source-map:
在一个单独文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包速度;

cheap-module-source-map:
在一个单独的文件中产生一个不带列映射的map,不带列映射提高了打包速度,
但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便。

eval-source-map:
使用eval打包源文件模块,在同一个文件中生产干净的完整版的sourcemap,
但是对打包后输出的JS文件的执行具有性能和安全的隐患。在开发阶段这是一个非常好的选项,在生产阶段则一定要不开启这个选项。

cheap-module-eval-source-map:
这是在打包文件时最快的生产source map的方法,生产的 Source map 会和打包后的JavaScript文件同行显示,
没有影射列,和eval-source-map选项具有相似的缺点。

四种打包模式,有上到下打包速度越来越快,不过同时也具有越来越多的负面作用,较快的打包速度的后果就是对执行和调试有一定的影响。
个人意见是,如果大型项目可以使用source-map,如果是中小型项目使用eval-source-map就完全可以应对,需要强调说明的是,source map只适用于开发阶段,上线前记得修改这些调试设置。
12、第三方插件引入
第一种
npm install jquery
安装完成后,你会发现在package.json中并不存在这个包的依赖。如果你项目拷贝给别人继续开发,或者别人和你git合作,
再次下载项目npm install时就会缺少这个jquery包。项目就会无法正常运行,所以这也是我们最不赞成的安装方法。

第二种:
npm install jquery –save
安装完成后,它存在于package.json的dependencies中,也就是说它是生产环境需要依赖的包(上线时需要的以来包)。

第三种:
npm install jquery –save-dev
安装完成后,它存在于package.json的devDependencies中,也就是说它是开发环境中需要的,上线并不需要这个包的依赖。
安装全部项目依赖包:
npm install
安装生产环境依赖包:
npm install –production

这里我们演示jquery的安装和使用
下载jquery
npm install –save jquery
(1)=========单个文件需要用到某个库,使用局部引入的方式,如entry.js中使用jquery
修改entry.js文件
安装好后,还需要引入到我们的entry.js中,这里直接使用import进行引入就可以。

引入好后我们就可以在entry.js里使用jquery,我们可以加入下面的代码,然后进行测试。

在我们的页面中,看不到jquery文件的引入,因为被打包到了entry.js中

(2)=========全局引入,在任何地方都可以使用,需用到webpack的ProvidePlugin插件

先再webpack.config.js中引入webpack。

引入成功后配置我们的plugins模块,代码如下。

然后在需要使用jquery的地方直接使用即可
//测试全局的jquery是否引用成功,在你的某个js文件中写入如下代码

13、配置文件的模块化实现
先看一下Javascript的模块化

immodule.js

 

其实webpack的模块化和Javascript的模块化很类似。

首先在根目录,新建一个webpack_config文件夹,然后新建webpack_entry.js文件,代码如下:
webpack_entry.js

配置的模块化代码编写好以后,需要在webpack.config.js中引入,注意这里的引入只能使用require的方法。

然后在入口文件部分,修改成如下代码:

至此,模块化完成