Webpack之Hello World
文章目录
QQ: 380800878, 微信: kittenll
最近自己在做一些项目的时候使用Restful和react来做到前后端分离,感受到开发效率的成倍提升,故在此分享一下前端使用webpack作为前端的构建工具。
Webpack是一个前端资源加载,编译,打包工具,可以把多个分散的功能模块javascript, css打包压缩到一个模块当中;合并图片。Webpack使用使用各种的loader来加载编译对应的资源,在网上也有非常多的loader。
0、安装
- 全局安装:
|
|
还有一个开发者工具,此工具非常实用,后面介绍:
|
|
- 也可以使用本地模式随源码一起发行:
|
|
随源码一起发行的好处就是不需要别人也强制全局安装,别人拿到源码后直接npm update
后即可使用
1、简单使用
在介绍使用配置文件之前,先来看一下官方给出的最简单的编译例子:
新建一个目录hello
,进行到hello
目录,新建一个javascript文件entry.js
,内容如下:
|
|
然后新建一个index.html
文件,内容如下:
|
|
编译entry.js
到bundle.js
:
|
|
如果正常编译通过,你会看到如下的输出(这是我自己的输出,你的输出可能会不太一样):
|
|
使用浏览器打开index.html
,你将会看到网页上呈现It works.
2、多文件
现在假设咱们的代码写了非常多,一个文件看起来已经非常长而且混乱不便于维护,这时候就需要把不同的功能代码分开到不同的文件,最终使用webpack编译打包压缩到一个文件。
在hello
目录新建一个content.js
文件,内容如下:
|
|
把entry.js
修改成下面的内容,这一行是包含content.js
的功能,然后写到网页上面:
|
|
编译:
|
|
刷新浏览器打开的index.html
,你将会看到如下内容:
|
|
3、CSS
是的你没有看错,webpack也可以加载编译打包压缩css文件。
再来新建一个css文件style.css
,内容如下,把内页的背景变成黄色:
|
|
修改entry.js
,在原来的内容上面添加一行包含css文件:
|
|
继续编译:
|
|
这时候你会看到一个错误信息:
|
|
是时候loader出场了,因为在entry.js
里面require了css代码,但是前面安装的webpack里面不带有css loader,所以编译css的时候会出错,解决办法就是:
|
|
再编译后,再次刷新浏览器打开的index.html,你将会看到网页的背景颜色全部变成了黄色。
css-loader
加载、编译css资源文件,而style-loader
会把编译之后的css内容放入到<style>
标签内插入到dom的head里面。
在entry.js
里面使用了!style!css!./style.css
来告诉webpack需要使用css-loader和style-loader来处理style.css
,也可以不写!style!css!
,而在编译的时候指定,简化entry.js
文件如下:
|
|
这时候编译需要指定多一个参数了--module-bind 'css=style!css'
:
|
|
4、配置文件
webpack使用的配置文件名是webpack.config.js
,在hello
新建此文件,内容如下:
|
|
entry
:是入口程序,从哪个文件开始编译
output
:指定编译后的输出目录和文件名
module
里面的loaders
数组指定各种loader
,处理各种css, image, url, ttf等待文件。
这里指定的入口是entry.js
文件,输出到当前目录的bundle.js
文件,如果碰到代码require的css代码(在test
处配置,这后面可以写任何js的正则表达式),使用style-loader
和css-loader
加载编译。
编译:
|
|
有了配置文件这里只需要使用一个webpack的命令就可以进行编译,省了不少打字的时间。
5、watch
现在在命令行里面输入:
|
|
然后修改一下代码,webpack会实时的帮你编译,是不是又省了不少打字的时间。
6、webpack-dev-server
这是一个神器,特别是结合React的时候可以做到源代码修改的时候,不需要刷新浏览器就可以看到修改后的结果,这又省了不少时间,还可以做到可视化编程。费话不多说,首先需要安装:
npm install webpack-dev-server -g
命令行会输出类似如下的内容:
|
|
在浏览器输入http://localhost:8080/webpack-dev-server/,在最上方会有一个App ready.
的黑条条,下面的iframe加载的就是index.html
的内容。
把entry.js
修改成如下的内容:
|
|
回到浏览器你会发现,网页的内容已经改变了,下面多了一行Hello World!。
这个Hello World!有点长,呵呵!^_^