一、Hello Webpack
1.webpack介绍
webpack是一个现代的JavaScript应用模块打包器(module bundler),它能把各种资源,例如JS(含JSX)、coffee、样式(less/sass)、图片等都作为模块来处理和使用。它有着难以置信的配置和神奇的效果,大大提高了我们程序员的工作效率。举个例子:我们可以直接使用require(xxx)的形式来引入各模块,即使他们可能需要经过编译(比如JSX和sass),但我们无须再上面花费太多心思,webpack有着各种健全的加载器(loader)在默默处理这些事情。它可以部分代替Grunt和gulp的功能。
2.webpack的安装
1、全局安装
1 | $npm install webpack -g |
2、直接安装到项目的依赖里,也就是写入package.json
1 | npm init |
3.配置文件webpack.config.js
重点:什么是入口文件?模块打包的起点称之为入口起点(entry point)。入口起点告诉webpack从哪里开始,并遵循着依赖关系进行打包。可以将您的应用入口起点认为是根上下文(contextual root)或app第一个启动文件。
4.我们来作一个实例(Hello World!)
1.建立index.html文件
2.建立main.js文件
3.建立webpack.config.js文件
4.命令行输入webpack
5.安装live-server 并预览程序
index.html
1 | <!DOCTYPE html> |
main.js
1 | document.write("<h1>Hello World</h1>"); |
安装live-server,只要用npm install就可以安装了。
1 | npm install live-server -g |
二、多入口文件(Multiple entry files)
1.webpack配置多路口文件
当我们需要时webpack 是允许我们有多个输出文件的。也就是说,我们可以在html文件中引入2个js文件或者其他的文件。
我们来做个多入口文件的例子:
1、首先我们建立两个JavaScript文件,分别是main1.js 和main2.js。然后在里边输出 Hello world 和 Hello webpack 。
main1.js
1 | document.write("<h1>Hello World!</h1>"); |
main2.js
1 | document.write("<h2>Hello Webpack!</h2>"); |
2、建立indx.html文件,引入bundle1.js和bundle2.js,这两个文件就是我们要打包的两个js文件。
index.html
1 | <!DOCTYPE html> |
3、建立webpack.config.js配置文件。
1 | module.exports = { |
三、使用Webpack CSS loader加载器
1.什么是loader
loader用于转换应用程序的资源文件,他们是运行在nodejs下的函数,使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用loader来告诉webpack去加载一个coffeeScript或者Babel文件。
2.loader的解析
loader的解析类似模块,一个loader模块会导出一个方法并且可被nodejs写为可兼容的JavaScript,通常情况下通过npm来管理loader,但你也可以把loader放在自己的应用里。
3.安装loader
你可以通过npm来安装loader
1 | $ npm install xxx-loader --save-dev |
或者
1 | $ npm install xxx-loader --save |
4.CSS-loader 实例
1、先建立一个html文件,并引入bundle.js文件。
index.html
1 | <!DOCTYPE html> |
2、建立main.js文件,并用require引入app.css文件。然后写一句话。
main.js
1 | require('./app.css'); |
3、建立app.css文件,把body 的背景设置为红色。
app.css
1 | body { |
4、建立webpack.config.js配置文件,在里边加入加载器。
1 | module.exports = { |
5、用npm 安装 css-loader 和style-loader
1 | $ npm install style-loader --save-dev |
6、在控制台输入 webpack 进行打包
1 | $ webpack |
这样就用webpack的加载器成功打包了css样式文件。以后我们的html里就可以不用看到css的引入语句了。
四、使用webpack Image loader 加载图片
直接用一个例子说明
1、新建main.js文件, 创建img标签后,把src的值用require引进来。然后插入标签。
1 | var img1 = document.createElement("img"); |
2、建立index.html文件,引入bundle.js
1 | <html lang="en"> |
3、建立webpack.config.js配置文件
1 | module.exports = { |
这里需要说明的是limit ,它的左右是如果图片的大小,小于8192bytes就以Data URL的形式引入图片,大于就用图片地址引用。
4、打开命令行,用cnpm 安装url-loader包。
1 | $ cnpm install url-loader --save-dev |
5、用webpack命令进行打包
1 | $ webpack |
五、使用uglify-js 压缩打包JS代码
1.webpack 插件机制介绍:
插件可以完成更多loader不能完成的功能。插件的使用一般是在webpack的配置信息 plugins选定中指定。Webpack本身内置了一些常用的插件,还可以通过npm安装第三方插件。
2.uglify-js介绍:
ugligy-js是一个用npm安装的JavaScript代码压工具,我们在grunt和gulp中经常使用。
用npm命令进行安装:
1 | npm install uglify-js g |
最常用的方法:
1 | uglifyjs [input files] [options] |
3.用Webpack中的uglify-js压缩Demo
这里我就不贴出index.html和main.js的代码了,我只贴出webpack.config.js的代码。如果你想完整的做出例子,可以按照视频步骤一步一步的操作。
1 | var webpack = require('webpack'); |
六、使用webpack构建本地服务器
我们之前一直都在用live-server充当本地服务器,其实它和webpack是不搭的,我们可以利用webpack自带的webpack-dev-server来构建一个本地服务器。它让你的浏览器检测你的代码修改,并自动刷新修改后的结果,它是基于node.js构建。webpack-dev-server是一个单独的组件,在webpack中进行配置之前需要单独安装它作为项目依赖。
1、安装webpack-dev-server
本地依赖
1 | npm install --save-dev webpack-dev-server |
全局安装
1 | npm install -g webpack-dev-server |
2、在webpack.config.js中配置devserver选项:
- contentBase : 默认webpack-dev-server会为根文件夹提供本地服务器,如果想为另外一个目录下的文件提供本地服务器,应该在这里设置其所在目录。
- port :设置默认监听端口,如果省略,默认为”8080″
- inline : 设置为true,当源文件改变时会自动刷新页面
- colors : 设置为true,使终端输出的文件为彩色的
- historyApiFallback :在开发单页时非常有用,它依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html
- host : 主机地址,如果是开发本机搭建,需要使用本机IP地址,否则会报错。
配置文件如下:
1 | module.exports = { |
3、在终端中输入命令,开启运行本地服务器。它不仅提供了服务器,还会监视我们的文件变化自动更新效果,但是它不是真正的打包,它类似于在内存中进行了打包。所以本地文件并没有变化。
1 | webpack-dev-server |
其实webpack构建服务器才是正道,如果你使用了webpack,那么尽量使用webpack-dev-server吧,这能大大提高您的工作效率。