webpack入门教程
注:本文内容比较基础,供初学者快速入门参考。
更多详细信息请参考官方文档。
本文同步发布于我的博客,欢迎关注^_^
1. 安装
npm install -g webpack
2. 基本使用
假设项目文件结构如下:
/app
|--index.html
|--main.js
|--mymodule.js
index.html
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="./app.js"></script>
</body>
</html>
main.js
和mymodule.js
代码如下:
// main.js
require('./mymodule.js')();
// mymodule.js
module.exports = function() {
document.write('hello webpack');
};
然后执行命令:
webpack main.js app.js
会打包生成app.js
文件。
3. 配置文件
每次手动输入源文件名和输出文件名比较麻烦,可以使用配置文件来进行管理。在app
目录下新建webpack.config.js
文件,内容如下:
module.exports = {
entry: './main.js',
output: {
filename: 'app.js'
}
};
然后执行
webpack
就会自动生成打包好的文件了。
但是这样每次改了源文件之后都需要手动执行命令,可以通过添加watch
来自动检测文件变化并重新打包。配置文件修改如下:
module.exports = {
entry: './main.js',
output: {
filename: 'app.js'
},
watch: true
};
配置文件中可以进行其它各种功能的相关配置,详情可以参看官方文档。
4. 使用loader
很多模块打包工具只是针对js文件,而webpack的强大之处在于将模块的概念进行了扩展,认为一切静态文件都是模块,包括css、html模板、字体、CoffeeScript等等。虽然webpack本身依然是只能够处理js文件,但是通过一系列的loader,就可以处理其它文件了。
下面以css-loader
和style-loader
为例,演示如何打包样式文件。首先执行如下命令安装依赖模块:
npm install css-loader style-loader --save-dev
然后在app
目录下新建style.css
文件,内容如下:
body {
background: red;
}
然后修改main.js
如下:
require('./mymodule.js')();
require('style!css!./style.css');
因为webpack不能够直接处理css文件,因此在require
语句中需要指明需要的loader,一个文件可以经由多个loader依次处理,loader与loader之间,以及loader与文件名之间用!
分隔。在这个例子中,也可以看出,如果使用了多个loader的话,数据流向是从右向左的,也就是从style.css
开始,依次经过css-loader
和style-loader
。
但是假如有多个css文件的话,每个require
语句都需要加上loader说明,很不方便,因此可以在webpack.config.js
文件中进行配置,配置如下:
loaders: [{
test: /\.css$/,
loader: 'style!css'
}]
// or
loaders: [{
test: /\.css$/,
loaders: ['style', 'css']
}]
关于loader的更多信息,可以参考:
5. 外部依赖
现在假如该例子中需要用到angular,首先在index.html
中通过<script>
标签引入angular库,然后修改mymodule.js
如下:
var angular = require('angular');
angular.module('MyModule', []);
此时如果执行webpack
命令会报如下错误:
ERROR in ./mymodule.js
Module not found: Error: Cannot resolve module 'angular' in /xxx/xxx/app
@ ./mymodule.js 1:14-32
这是因为webpack无法解析angular依赖模块,此时需要在配置文件中对外部依赖进行配置:
externals: {
'angular': true
}
更多信息参考configuration#externals。
6. 输出类型
现在假如我们希望打包后的文件作为一个单独的库,并且遵循AMD规范可以被被requirejs来使用,可以修改配置文件如下:
output: {
filename: 'app.js',
library: 'app',
libraryTarget: 'amd'
}
此时输出的app.js
结构如下:
define("app", ["angular"], function( /* ... */ ) {
/* ... */
});
通过配置output.libraryTarget
,可以自定义输出的模块类型,包括AMD,CommonJS,变量等多种输出类型。具体可以参考configuration#output。
7. 多文件
现在假如项目目录结构如下:
/app
|--components.js
|--index.html
|--main.js
|--mymodule.js
其中mymodule.js
被main.js
和components.js
所使用。假如我们希望main.js
输出为app.js
,而components
输出为app.components.js
,则可以修改配置文件如下:
entry: {
app: './main.js',
'app.coomponents': './components.js'
},
output: {
filename: '[name].js'
}
webpack入门教程的更多相关文章
- webpack入门教程之初识loader(二)
上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...
- Webpack 入门教程
Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 本章节基于 Webpack3.0 测试通过. 从图中我们可以看出,W ...
- [转]Webpack 入门教程
本文转自:http://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后 ...
- webpack入门教程--3
webpack打包还可以使用配置文件,我们先创建一个叫做webpack.config.js的文件.这里需要注意一下,这个JS文件的名字不是我们胡乱写的,也是不能更改的,因为webpack 命令执行后, ...
- webpack入门教程--2
这次是创建第二个JS文件. 我们还是在app文件夹中创建一个叫做book2.js的JS文件,并在其中输入以下代码: module.exports = "It works from book2 ...
- webpack入门教程--1
首先说什么是webpack:Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 然后因为webpack有不同的版本,所以 ...
- 前端项目自动化构建工具——Webpack入门教程
参考资料:https://www.webpackjs.com/(中文文档) https://www.webpackjs.com/(官方文档) 首先有必要说明一下,本文侧重讲解webpack基本配置 ...
- Webpack新手入门教程(学习笔记)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 30.0px Helvetica; color: #000000 } ...
- webpack入门文档教程
.octicon{margin-right:2px}a.tabnav-extra:hover{color:#4078c0;text-decoration:none}.tabnav-btn{margin ...
随机推荐
- Mac系统下使用VirtualBox虚拟机安装win7--第二步 创建win7系统
第二步 创建win7系统 启动 Virtual Box 以后,点击窗口左上角的“新建”按钮,如图所示
- Android Tab -- 使用ViewPager、PagerTitleStrip/PagerTabStrip来实现
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...
- VS对路径的访问被拒绝
问题:权限问题. 1.检查自己电脑账户.是否是Administrator.如果没有启用.在[我的电脑]——[管理]——[本地用户和组]——[用户]——[Administrator]——[属性启用] 2 ...
- 基于python网络编程实现支持购物、转账、存取钱、定时计算利息的信用卡系统
一.要求 二.思路 1.购物类buy 接收 信用卡类 的信用卡可用可用余额, 返回消费金额 2.信用卡(ATM)类 接收上次操作后,信用卡可用余额,总欠款,剩余欠款,存款 其中: 1.每种交易类型不单 ...
- C[泊车管理系统]
// // main.c // 泊车管理系统 // // Created by 丁小未 on 13-7-14. // Copyright (c) 2013年 dingxiaowei. All ...
- hibernate 关联映射
关联关系大致分为两大类: 1.单向关系:只需单向访问关联端.例如:只能通过老师访问学生,或者只能通过学生访问老师. 2.双向关系:关联的两端可以互相访问.例如:老师和学生之间可以互相访问. 单向关联可 ...
- Axure 全局辅助线(转)
普通辅助线作用于当前页 全局作用于所有页面 , 包括新建页面 创建普通辅助线直接拉出来 创建全局辅助线 , 在拉出来的时候按住 Ctrl 默认情况下 , 颜色不同 辅助线可以多选 , 用拖选 或 按 ...
- Get open Popups
public IEnumerable<Popup> GetOpenPopups() { return PresentationSource.CurrentSources.OfType< ...
- Java 之 多线程编程
1.线程: a.由来:单任务OS -- 多任务OS b.进程:每一个进程对应一个应用程序,分配独立内存空间 c.线程:线程是进程内部的一个独立的执行分支 d.特点:共享内容地址空间,切换成本更低 2. ...
- 如何把Eclipse工程导入到Android Studio
1 在Eclipse中新建android项目androiddemo.里面只有一个MainActivity,主要是使用fastjson将一个Person对象转化成字符串. 2 在项目上点击右键-&g ...