webpack入门教程
原文链接 http://gengliming.com/2016/01/01/webpack-getting-started-tutorial/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
前言
在此之前看了一下gulp相关教程,这里有一个还不错:Gulp for Beginners, 推荐给大家看看。
通过本教程你会了解到:
- 如何安装webpack;
- 如何使用webpack;
- 如何使用loaders;
- 如何使用开发服务器;
安装webpack
你需要已经安装安装node.js.
$ npm install webpack -g
这使得webpack命令可以使用
设置编译器(Compilation)
以一个空文件夹作为开始.
创建这些文件:
add entry.js
document.write("It works");
add index.html
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript" src="bundle.js" charset="utf-8"></script>
</body>
</html>
然后执行下面的命令:
$ webpack ./entry.js bundle.js
它将会编译你的文件并且创建一个bundle文件。
如果成功就会显示如下:
Version: webpack 1.12.11
Time: 51ms
Asset Size Chunks Chunk Names
bundle.js 1.42 kB 0 [emitted] main
chunk {0} bundle.js (main) 28 bytes [rendered]
[0] ./tutorials/getting-started/setup-compilation/entry.js 28 bytes {0} [built]
在浏览器中打开index.html,将会显示It works
.
第二个文件
接下来添加content.js:
module.exports = "It works from content.js.";
更新entry.js
document.write(require("./content.js"));
然后重新编译:
$ webpack ./entry.js bundle.js
刷新你的浏览器(index.html),你将会见到It works from content.js.
webpack将会通过你的entry文件分析对于其他文件的依赖。 这些文件(叫做模块)也包含在bundle.js,webpack将会给每个模块i 个 唯一id,并且在bundle.js通过id将所有模块保存成可访问的. 只有entry模块在启动时被执行。一个小的运行时提供了require函数 并且当需要的时候执行这些依赖。
第一个loader
我们想在程序中添加css文件。
webpack只能处理本地的javascript,因此我们需要css-loader
来处理CSS文件。我们也需要style-loader
来实现在CSS文件中的样式。
运行npm install css-loader style-loader
来安装loaders。(它们需要本地安装,不需要-g
)这将会创建一个node_module
文件夹,loaders存在于这个文件夹里。
让我们来使用它们,添加style.css:
body {
background: yellow;
}
更新entry.js:
require("!style!css!./style.css");
document.write(require("./content.js"));
重新编译,并且刷新浏览器,你将会看到黄色背景。
通过将loader作为模块请求的前缀,模块就能穿过loader的管道。这些loader按指定的方式转化文件的内. 当转化被应用后,结果就是javascript模块。
绑定loader
我们不像写着么长的require require("!style!css!./style.css");
.
我们可以把文件扩展名绑定到loader,这样我们只需要写:require("./style.css")
更新entry.js
require("./style.css");
document.write(require("./content.js"));
编译:
webpack ./entry.js bundle.js --module-bind 'css=style!css'
一些环境可能需要双引号:–module-bind “css=style!css”
你将会见到刚才相同的页面。
配置文件
我们想把相关的配置放倒配置文件里,添加webpack.config.js
module.exports = {
entry: "./entry.js",
output: {
path: __dirname,
filename: "bundle.js"
},
module: {
loaders: [
{ test: /\.css$/, loader: "style!css" }
]
}
};
现在我们只需要运行webpack
编译,结果如下:
Version: webpack 1.12.11
Time: 379ms
Asset Size Chunks Chunk Names
bundle.js 10.7 kB 0 [emitted] main
chunk {0} bundle.js (main) 8.86 kB [rendered]
[0] ./tutorials/getting-started/config-file/entry.js 65 bytes {0} [built]
[1] ./tutorials/getting-started/config-file/style.css 943 bytes {0} [built]
[2] ../~/css-loader!./tutorials/getting-started/config-file/style.css 201 bytes {0} [built]
[3] ../~/css-loader/lib/css-base.js 1.51 kB {0} [built]
[4] ../~/style-loader/addStyles.js 6.09 kB {0} [built]
[5] ./tutorials/getting-started/config-file/content.js 45 bytes {0} [built]
webpack命令将会在当前目录下加载webpack.config.js
更好看的输出
如果项目变大,编译就有可能会久。因此我们想展示进度条。并且我们希望是彩色的...
我们可以这么做:
webpack --progress --colors
watch模式
我们不想每次修改都要手动重新编译,可以这样做:
webpack --progress --colors --watch
webpack可以缓存未修改的模块和输出文件。
当使用watch模式时,webpack向所有文件安装watcher。如果有变化被探测到,它就会重新编译。当缓存可用时,webpack保存每个模块 到内存中,如果模块没有改变就会重用。
development server
development server更好些。
npm install webpack-dev-server -g
webpack-dev-server --progress --colors
这个是在localhost:8080上绑定了一小的express服务,服务于你的静态资源和bundle(自动被编译的)。 它将会在bundle被编译(SockJS)后自动更新浏览器页面。在你的浏览器中打开。
dev server使用的就是webpack的watch模式。它阻止webpack把结果文件放到磁盘上,而它是从内存中提供和保存结果文件的。
参考
webpack-getting-started:真正的入门教程 WebpackTutorial:更多入门教程