Webpack的安装
1. 安装Node
官方Node:https://nodejs.org,npm(基于命令行的node包管理工具)会一起被安装。
安装完成后使用相应命令可以查看版本号以确定是否成功安装
2. 安装Webpack
a. 先全局安装webpack
webpack -h //webpack 1.13.3
|
b. 项目根目录下创建package.json
文件
优先使用命令行
也可以手动添加
{ "name": "wp", //项目名称,这里不能为'webpack',不然无法安装项目依赖 "version": "1.0.0", //项目版本 "description": "this is a test for webpack", //项目描述 "main": "bundle.js", //项目入口文件 "keywords": [ "webpack" ], "author": "simmin", //项目作者信息 "license": "ISC" //项目许可协议 }
|
c. 再作为项目的开发依赖(devDependencies)安装
项目目录下:
$ npm install webpack --save-dev
|
Webpack的使用
1. 基础使用
a.创建index.html
<!-- index.html --> <html> <head> <meta charset="utf-8"> </head> <body> <script src="bundle.js"></script> </body> </html>
|
b.创建entry.js
//entry.js document.write('It works.')
|
c.编译打包
命令:
webpack entry.js bundle.js
|
运行日志:
Hash: 71820986fc674176394e Version: webpack 1.13.3 Time: 32ms Asset Size Chunks Chunk Names bundle.js 1.42 kB 0 [emitted] main [0] ./entry.js 27 bytes {0} [built]
|
用浏览器打开index.html
可以看到It works
2. 更进一步
a. 在基础使用上创建module.js
// module.js module.exports = 'It works from module.js.'
|
b. 修改entry.js
// entry.js document.write('It works.') document.write(require('./module.js')) // 添加模块
|
c.编译打包
命令:
webpack entry.js bundle.js
|
运行日志:
Hash: e780647104b165cf6af5 Version: webpack 1.13.3 Time: 40ms Asset Size Chunks Chunk Names bundle.js 1.58 kB 0 [emitted] main [0] ./entry.js 69 bytes {0} [built] [1] ./module.js 43 bytes {0} [built]
|
用浏览器打开index.html
可以看到It works.It works from module.js.
Webpack 会分析入口文件,解析包含依赖关系的各个文件。这些文件(模块)都打包到 bundle.js 。Webpack 会给每个模块分配一个唯一的 id 并通过这个 id 索引和访问模块。在页面启动时,会先执行 entry.js 中的代码,其它模块会在运行 require 的时候再执行。
3. 使用Loader
a. 为什么用Loader
Webpack本身只能处理JavaScript模块,其他文件类型的需要用Loader进行转换。
Loader可以理解为模块和资源的转换器,本身是一个函数,接收原文件作为参数,返回转换的结果。
b. 怎么用Loader
以读取css文件为例:
创建style.css
:
/* style.css */ body { background: yellow; }
|
修改 entry.js:
require("!style!css!./style.css") // 载入 style.css document.write('It works.') document.write(require('./module.js'))
|
安装 loader:
npm install css-loader style-loader
|
用 css-loader 来读取它,再用 style-loader 把它插入到页面中。
编译运行
webpack entry.js bundle.js
|
运行日志
Hash: e422c4f148f26b5cf639 Version: webpack 1.13.3 Time: 561ms Asset Size Chunks Chunk Names bundle.js 11.8 kB 0 [emitted] main [0] ./entry.js 104 bytes {0} [built] [5] ./module.js 43 bytes {0} [built] + 4 hidden modules
|
用浏览器打开index.html
可以看到黄色的背景。
如果每次 require CSS 文件的时候都要写 loader 前缀,是一件很繁琐的事情。我们可以根据模块类型(扩展名)来自动绑定需要的 loader。
将 entry.js 中的 require(“!style!css!./style.css”) 修改为 require(“./style.css”) ,然后执行:
$ webpack entry.js bundle.js --module-bind 'css=style!css' // 有些环境下可能需要使用双引号 $ webpack entry.js bundle.js --module-bind "css=style!css"
|
显然,这两种使用 loader 的方式,效果是一样的。
4. 使用配置文件
从前面的学习我们知道,Webpack是通过在命令行传入参数来执行,此外,也可以通过指定的配置文件来执行。默认情况下是搜索webpack.config.js文件,这个文件是一个 node.js 模块,返回一个 json 格式的配置信息对象,或者通过 –config 选项来指定配置文件。
a. 在package.json
中添加依赖
{ "name": "wp", "version": "1.0.0", "description": "this is a test for webpack", "main": "bundle.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "webpack" ], "author": "simmin", "license": "ISC", "devDependencies": { "css-loader": "^3.10.9", "style-loader": "^3.10.9", "webpack": "^1.13.3" } }
|
b. 创建配置文件webpack.config.js
var webpack = require('webpack') module.exports = { entry: './entry.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ {test: /\.css$/, loader: 'style!css'} ] } }
|
c. 简化entry.js
中的style.css
加载方式
d. 编译运行
命令:
运行日志:
Hash: 95f9c0b19dc5695082bb Version: webpack 1.13.3 Time: 525ms Asset Size Chunks Chunk Names bundle.js 11.8 kB 0 [emitted] main [0] ./entry.js 94 bytes {0} [built] [5] ./module.js 43 bytes {0} [built] + 4 hidden modules
|
可以看到 webpack 通过配置文件执行的结果前面通过命令行 webpack entry.js bundle.js –module-bind ‘css=style!css’ 执行的结果是一样的
5. 使用插件
插件可以完成更多 loader 不能完成的功能。
插件的使用一般是在 webpack 的配置信息 plugins 选项中指定。
Webpack 本身内置了一些常用的插件,还可以通过 npm 安装第三方插件。
以最简单的BannerPlugin
内置插件为例:
a. 修改webpack.config.js
,添加plugins:
var webpack = require('webpack') module.exports = { entry: './entry.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ {test: /\.css$/, loader: 'style!css'} ] }, plugins: [ new webpack.BannerPlugin('This file is created by simmin') ] }
|
b. 编译运行
打开bundle.js
可以看到文件头部:
(function(modules) { var installedModules = {}; ...
|