Webpack
是一个在你的应用中建立模块化的JavaScript
工具,我们需要从CLI(Command Line Interface)
命令行接口和API
中去学会使用它,它可以简化我们的工作流程,并且以正确的顺序快速构建应用程序的依赖图和捆绑它们。Webpack
可以通过配置来定制优化你的代码,去合理的分离我们的css/js
代码,无需再次刷新页面就可以在开发服务器运行一个程序的代码以及其他许多这样的冷却特性。
接下来会一步步的告诉你,使用Webpack
的好处,和你的首选
1.创建一个包
我们先可以为我们的Webpack
创建一个演示的目录
mkdir webpack-demo && cd webpack-demo
npm init -y
npm install --save-dev webpack
./node_modules/.bin/webpack --help # 其他
.\node_modules\.bin\webpack --help # 针对windows系统
webpack --help #如果你是全局安装
现在创建一个子目录app
然后创建一个index.js
文件
function component () {
var element = document.createElement('div');
/* _是属于lodash中的东西,稍后会提 */
element.innerHTML = _.join(['Hello','webpack'], ' ');
return element;
}
document.body.appendChild(component());
我们创建一个index.html
文件去运行它
<html>
<head>
<title>webpack 2 demo</title>
<script src="https://unpkg.com/lodash@4.16.6"></script>
</head>
<body>
<script src="app/index.js"></script>
</body>
</html>
这个例子中,我们通过script
标签构造了一个隐藏的依赖关系
index.js
取决于lodash
已经被包括进来了,因为index.js
用到了lodash
提供的_
,一个全局变量。
用这种模式来管理JavaScript
项目是有一些问题的:
如果依赖失踪,或包含错误的想想发生,接下来的应用程序就不会执行。
如果包括但不依赖,还有很多不必要的代码下载到了客户端。
当然前面的lodash
如果你没有安装的话是不能够使用的(可以全局安装)
npm -g install lodash
npm install --save lodash
然后import
导入他们
+ import _ from 'lodash';
function component () {
...
如今我们会在此改变index.html
,其中将只会引入一个bundle.js
文件
<html>
<head>
<title>webpack 2 demo</title>
- <!--<script src="https://unpkg.com/lodash@4.16.6"></script>-->
</head>
<body>
- <!--<script src="app/index.js"></script>-->
+ <script src="dist/bundle.js"></script>
</body>
</html>
之前的index.js
明确要求lodash
存在,并且提供_
。
通过声明一个模块需要的依赖关系,Webpack
可以使用这些信息来建立一个依赖图。然后使用这个依赖图以正确的顺序生成一个脚本的优化包用来执行。还未使用的依赖关系将不会包含在包中。
现在运行Webpack
用index.js
作为输入文件,用bundle.js
作为输出文件。
./node_modules/.bin/webpack app/index.js dist/bundle.js
Hash: ff6c1d39b26f89b3b7bb
Version: webpack 2.2.0
Time: 385ms
Asset Size Chunks Chunk Names
bundle.js 544 kB 0 [emitted] [big] main
[0] ./~/lodash/lodash.js 540 kB {0} [built]
[1] (webpack)/buildin/global.js 509 bytes {0} [built]
[2] (webpack)/buildin/module.js 517 bytes {0} [built]
[3] ./app/index.js 278 bytes {0} [built]
在你的浏览器中打开index.html
,你会成功的在页面中看到“Hello webpack
”。
2.在Webpack
中使用ES2015
注意到前面的文件了使用ES2015
模块导入(app/index.js
)吗? 虽然import/export
语句在浏览器不支持,然而使用它们是很好,因为Webpack
很好的用ES5
封装了他们,起到了模拟的效果。
值得注意的是,Webpack
根本不会去修改你除了import/export
之外的代码,你依旧可以使用其他的东西,当然,如果是import/export
,Webpack
会分分钟钟帮你换掉。
3.为Webpack
配置config
对于更复杂的配置,我们可以使用一个配置文件,Webpack
会参考你的配置文件去打包你的代码。在您创建一个webpack.config.js
文件后,你可以设置CLI
命令在配置设置中。
webpack.config.js
var path = require('path');
module.exports = {
entry: './app/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
这个文件是可以直接运行的
./node_modules/.bin/webpack --config webpack.config.js
Hash: ff6c1d39b26f89b3b7bb
Version: webpack 2.2.0
Time: 390ms
Asset Size Chunks Chunk Names
bundle.js 544 kB 0 [emitted] [big] main
[0] ./~/lodash/lodash.js 540 kB {0} [built]
[1] (webpack)/buildin/global.js 509 bytes {0} [built]
[2] (webpack)/buildin/module.js 517 bytes {0} [built]
[3] ./app/index.js 278 bytes {0} [built]
如果webpack.config.js
存在,直接执行webpack
指令,它会默认执行这个文件。
如果你之前用“创建一个包”的知识点成功的创建了dist/bundle.js
文件,那么请删除之前的dist
文件,以此来验证webpack.config.js
文件是否执行成功。
这个配置文件可以有效的提高我们Webpack
的灵活性,我们可以增加规则加载程序,插件选项,等等很多有趣的事。
4.用npm
去运行Webpack
我们建立一个package.json
然后在package.json
中保存CLI
运行webpack
的指令,当然这不是特别的好。
{
...
"scripts": {
"build": "webpack"
},
...
}
然后使用npm run build
去运行package.json
中的CLI
指令。
你可以通过自己设置一些webpack
参数来运行Webpack
。
下一篇将讲
Webpack
的安装