注:本文内容比较基础,供初学者快速入门参考。

更多详细信息请参考官方文档

本文同步发布于我的博客,欢迎关注^_^

1. 安装

  1. npm install -g webpack

2. 基本使用

假设项目文件结构如下:

  1. /app
  2. |--index.html
  3. |--main.js
  4. |--mymodule.js

index.html代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <script src="./app.js"></script>
  9. </body>
  10. </html>

main.jsmymodule.js代码如下:

  1. // main.js
  2. require('./mymodule.js')();
  3. // mymodule.js
  4. module.exports = function() {
  5. document.write('hello webpack');
  6. };

然后执行命令:

  1. webpack main.js app.js

会打包生成app.js文件。

3. 配置文件

每次手动输入源文件名和输出文件名比较麻烦,可以使用配置文件来进行管理。在app目录下新建webpack.config.js文件,内容如下:

  1. module.exports = {
  2. entry: './main.js',
  3. output: {
  4. filename: 'app.js'
  5. }
  6. };

然后执行

  1. webpack

就会自动生成打包好的文件了。

但是这样每次改了源文件之后都需要手动执行命令,可以通过添加watch来自动检测文件变化并重新打包。配置文件修改如下:

  1. module.exports = {
  2. entry: './main.js',
  3. output: {
  4. filename: 'app.js'
  5. },
  6. watch: true
  7. };

配置文件中可以进行其它各种功能的相关配置,详情可以参看官方文档

4. 使用loader

很多模块打包工具只是针对js文件,而webpack的强大之处在于将模块的概念进行了扩展,认为一切静态文件都是模块,包括css、html模板、字体、CoffeeScript等等。虽然webpack本身依然是只能够处理js文件,但是通过一系列的loader,就可以处理其它文件了。

下面以css-loaderstyle-loader为例,演示如何打包样式文件。首先执行如下命令安装依赖模块:

  1. npm install css-loader style-loader --save-dev

然后在app目录下新建style.css文件,内容如下:

  1. body {
  2. background: red;
  3. }

然后修改main.js如下:

  1. require('./mymodule.js')();
  2. require('style!css!./style.css');

因为webpack不能够直接处理css文件,因此在require语句中需要指明需要的loader,一个文件可以经由多个loader依次处理,loader与loader之间,以及loader与文件名之间用!分隔。在这个例子中,也可以看出,如果使用了多个loader的话,数据流向是从右向左的,也就是从style.css开始,依次经过css-loaderstyle-loader

但是假如有多个css文件的话,每个require语句都需要加上loader说明,很不方便,因此可以在webpack.config.js文件中进行配置,配置如下:

  1. loaders: [{
  2. test: /\.css$/,
  3. loader: 'style!css'
  4. }]
  5. // or
  6. loaders: [{
  7. test: /\.css$/,
  8. loaders: ['style', 'css']
  9. }]

关于loader的更多信息,可以参考:

5. 外部依赖

现在假如该例子中需要用到angular,首先在index.html中通过<script>标签引入angular库,然后修改mymodule.js如下:

  1. var angular = require('angular');
  2. angular.module('MyModule', []);

此时如果执行webpack命令会报如下错误:

  1. ERROR in ./mymodule.js
  2. Module not found: Error: Cannot resolve module 'angular' in /xxx/xxx/app
  3. @ ./mymodule.js 1:14-32

这是因为webpack无法解析angular依赖模块,此时需要在配置文件中对外部依赖进行配置:

  1. externals: {
  2. 'angular': true
  3. }

更多信息参考configuration#externals

6. 输出类型

现在假如我们希望打包后的文件作为一个单独的库,并且遵循AMD规范可以被被requirejs来使用,可以修改配置文件如下:

  1. output: {
  2. filename: 'app.js',
  3. library: 'app',
  4. libraryTarget: 'amd'
  5. }

此时输出的app.js结构如下:

  1. define("app", ["angular"], function( /* ... */ ) {
  2. /* ... */
  3. });

通过配置output.libraryTarget,可以自定义输出的模块类型,包括AMD,CommonJS,变量等多种输出类型。具体可以参考configuration#output

7. 多文件

现在假如项目目录结构如下:

  1. /app
  2. |--components.js
  3. |--index.html
  4. |--main.js
  5. |--mymodule.js

其中mymodule.jsmain.jscomponents.js所使用。假如我们希望main.js输出为app.js,而components输出为app.components.js,则可以修改配置文件如下:

  1. entry: {
  2. app: './main.js',
  3. 'app.coomponents': './components.js'
  4. },
  5. output: {
  6. filename: '[name].js'
  7. }

webpack入门教程的更多相关文章

  1. webpack入门教程之初识loader(二)

    上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...

  2. Webpack 入门教程

    Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 本章节基于 Webpack3.0 测试通过. 从图中我们可以看出,W ...

  3. [转]Webpack 入门教程

    本文转自:http://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后 ...

  4. webpack入门教程--3

    webpack打包还可以使用配置文件,我们先创建一个叫做webpack.config.js的文件.这里需要注意一下,这个JS文件的名字不是我们胡乱写的,也是不能更改的,因为webpack 命令执行后, ...

  5. webpack入门教程--2

    这次是创建第二个JS文件. 我们还是在app文件夹中创建一个叫做book2.js的JS文件,并在其中输入以下代码: module.exports = "It works from book2 ...

  6. webpack入门教程--1

    首先说什么是webpack:Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 然后因为webpack有不同的版本,所以 ...

  7. 前端项目自动化构建工具——Webpack入门教程

    参考资料:https://www.webpackjs.com/(中文文档)   https://www.webpackjs.com/(官方文档) 首先有必要说明一下,本文侧重讲解webpack基本配置 ...

  8. Webpack新手入门教程(学习笔记)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 30.0px Helvetica; color: #000000 } ...

  9. webpack入门文档教程

    .octicon{margin-right:2px}a.tabnav-extra:hover{color:#4078c0;text-decoration:none}.tabnav-btn{margin ...

随机推荐

  1. ThinkPHP入门(二)

    smarty使用 smarty引入流程 1. 控制器IndexAction.class.php function index() $this -> display(); (父类Action的di ...

  2. DOM - 5.事件冒泡 + 6.事件中的this

    5.事件冒泡 如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发.触发的顺序是"由内而外" .验证:在页面上添加一个table. ...

  3. 关于配置Spring框架的多个propertyConfigurer的问题

    http://blog.csdn.net/aa427/article/details/38375259

  4. 16.迭代器模式(Iterator Pattern)

    using System; namespace ConsoleApplication9 { class Program { /// <summary> /// 迭代器模式提供了一种方法顺序 ...

  5. Webstorm & PhpStorm的序列号和证书

    WebStorm注册码 User Name: EMBRACE License Key: ===== LICENSE BEGIN ===== 24718-12042010 00001h6wzKLpfo3 ...

  6. Delphi中线程类TThread实现多线程编程1---构造、析构……

    参考:http://www.cnblogs.com/rogee/archive/2010/09/20/1832053.html Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大 ...

  7. 攻城狮在路上(叁)Linux(十四)--- 查阅文件内容

    常用命令:cat.tac.nl.more.less.head.tail.od... 一.直接查看文件内容:cat.tac.nl <==一次性全部读取 1.cat [-AbEnTv] 文件名 参数 ...

  8. TCP状态转换图详解

    以下对几个关键的中间状态进行说明: 三次握手: LISTEN:表示服务器的某个SOCKET处于监听状态,可以进行连接了. SYN_SENT:表示客户端的某个SOCKET与服务器进行connect时,首 ...

  9. ios 音乐播放

    #import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...

  10. 开始我的PostgreSQL的学习之旅

    经过这么长时间的学习,终于确定了我的研究方向是PostgreSQL的空间数据库的设计流程,具体怎样实现这个过程,其难度是挺大的,我必须克服掉,尽量得往前看.大家有相同的研究方向的,可以一同来学习,相互 ...