webpack学习(一)—— 入门
,我们通常采用的是组件化开发方式,这样就会对应有很多个js文件,而打包工具的出现则是为了正确处理这些js文件的依赖关系,并生成一个最终的文件,这样,我们最后只需要加载打包以后的文件就可以了,而无须加载许多单个的js文件。接下来我们就试下多个js文件的打包。
新建一个content.js
文件,文件内容如下:
document.write('this is the content from content.js')
将entry.js
文件修改如下:
document.write(require('./content.js'));
打包,执行 webpack ./entry.js bundle.js
;
刷新index.html
页面,可以看到此时其内容已变成this is the content from content.js
。
$ webpack ./entry.js bundle.js
Hash: 41ba4af12b1844d7deaf
Version: webpack 1.13.3
Time: 45ms
Asset Size Chunks Chunk Names
bundle.js 1.55 kB 0 [emitted] main
[0] ./entry.js 40 bytes {0} [built]
[1] ./content.js 44 bytes {0} [built]
可以看到,webpack以entry.js
文件为入口,而entry.js
文件又依赖了content.js
,这时webpack就会去加载content.js
,最后生成bundle.js
。
使用loader
上面的例子中可以看到webpack可以对js文件进行很好的处理,然而我们的项目中通常需要用到一些css文件对样式进行调整。那如何使用webpack对样式文件打包呢,就需要使用loader。
我们首先需要将css文件以js模块的方式加载进来,然后将这些样式应用到dom上。这两个过程对应两个加载器:css-loader
和style-loader
。这两个模块可以通过npm进行安装,注意安装到当前目录即可,不要加-g
。
$ npm install css-loader style-loader
这个命令会在当前目录下创建一个node_modules
文件夹,该文件夹包括我们用到的包,css-loader
和style-loader
。
举例:
step1: 新建一个css文件,style.css
body { background: yellow; }
step2: 修改entry.js
如下:
require('!style!css!./style.css');
document.write(require('./content.js'));
step3: 打包
$ webpack ./entry.js bundle.js
刷新页面,可以看到背景变为黄色。
!style!css!./style.css
指对style.css
文件先使用css-loader
进行处理,再通过style-loader
进行处理。其中css-loader
将css文件进行处理,使其可以作为一个js modules被处理;style-loader
则解析当前的样式,并应用到dom上。查看生成的bundle.js可以看到如下代码:
function addStylesToDom(styles, options) {
for(var i = 0; i < styles.length; i++) {
var item = styles[i];
var domStyle = stylesInDom[item.id];
if(domStyle) {
domStyle.refs++;
for(var j = 0; j < domStyle.parts.length; j++) {
domStyle.parts[j](item.parts[j]);
}
for(; j < item.parts.length; j++) {
domStyle.parts.push(addStyle(item.parts[j], options));
}
} else {
var parts = [];
for(var j = 0; j < item.parts.length; j++) {
parts.push(addStyle(item.parts[j], options));
}
stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
}
}
}
...
function createStyleElement(options) {
var styleElement = document.createElement("style");
styleElement.type = "text/css";
insertStyleElement(options, styleElement);
return styleElement;
}
以上步骤略显繁杂,每次打包需要指定入口文件和生成文件,且在使用加载器时也需要手动配置,很不方便。为了解决这个问题,我们可以使用配置文件来解决,即本文的第四部分。
webpack.config.js
这个文件设定了打包的配置,webpack会自动根据该文件来打包。一个基本的配置文件如下所示:
module.exports = {
entry: "./entry.js",
output: {
path: __dirname,
filename: "bundle.js"
},
module: {
loaders: [
{
test: /\.css$/,
loader: "style!css"
}
]
}
};
这里指定了三个参数,包括entry
,output
,module
,分别对应了入口文件entry.js
,打包生成的文件bundle.js
,以及模块加载器。有了配置文件,则可以直接打包:
$ webpack
webpack还支持实时监测文件的变化,并在页面中体现出来,无须每次修改文件都重新编译。只需要在打包的时候设置为watch模式即可。
$ webpack --watch
dev server
webpack还为我们提供了webpack-dev-server,它是一个小型的基于node的express服务器。利用webpack-dev-server我们可以轻松地启动服务。且webpack-dev-server默认采用的是watch模式,也就是说它会自动监测文件的变化,并在页面做出实时更新,我们不需要每次都重新编译。
安装webpack-dev-server
为了方便在命令行中使用,同样全局安装。
$ npm install webpack-dev-server -g
启动
$ webpack-dev-server
默认为8080端口。
在浏览器中打开http://localhost:8080/webpack... ,可以看到index.html页面。
修改content.js文件的内容,比如将内容修改为this is another content
,保存文件,可以看到index.html
页面自动刷新了。
以上内容对webpack的安装和基本的使用方法做了介绍。后续我还会更深入地去学习,并将学习过程中的知识点记录下来,希望能和大家一同学习进步。
(本文完)
webpack学习(一)—— 入门的更多相关文章
- webpack学习(入门基础)
webpack的学习webpack是什么?1:加载模块(将JS.sass/less.图片等作为模块来处理使用) 2:进行打包 webpack的优势?1:webpack以commonJS(JS的规范)的 ...
- webpack学习之入门实例
webpack:前端打包神器,目前活跃度甚至超过了gulp.grunt等,使用webpack打包,简单快速,下面记录下webpack环境搭建以及基本使用: 1.首先新建一个空白目录,用于项目根目录,比 ...
- react webpack.config.js 入门学习
在学习react 的时候必然会用到webpack打包工具,webpack的快速入门另外一篇文章中有记录,这里只记录webpack.config.js文件,因为每个项目下都必须配置,通俗的讲,它的作用就 ...
- 【Webpack】320- Webpack4 入门手册(共 18 章)(下)
介绍 1. 背景 最近和部门老大,一起在研究团队[EFT - 前端新手村]的建设,目的在于:帮助新人快速了解和融入公司团队,帮助零基础新人学习和入门前端开发并且达到公司业务开发水平. 本文也是属于[E ...
- 【Webpack】319- Webpack4 入门手册(共 18 章)(上)
介绍 1. 背景 最近和部门老大,一起在研究团队[EFT - 前端新手村]的建设,目的在于:帮助新人快速了解和融入公司团队,帮助零基础新人学习和入门前端开发并且达到公司业务开发水平. 本文也是属于[E ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- 【原】webpack学习笔记
之前在react的项目中有用过webpack,不过没有认真的去研究,这段时间又重新好好的学习一下webpack,发觉 webpack是一个很强大的东西.而且很好用,方便,接下来主要是做一下学习的笔记 ...
- [IT学习]sql 入门及实例
sql 是一种数据库查询语言,可以让你很快的查询到数据.其实一般情况下,你也可以采用excel来查询数据库数据. 但是人们通常认为sql会更加灵活和方便一些. sql学习的入门网站: http://w ...
- PHP学习笔记 - 入门篇(5)
PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...
- PHP学习笔记 - 入门篇(4)
PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...
随机推荐
- $Android启动界面(Splash)的两种实现方法
(一)用2个Activity实现 用Handler对象的postDelayed方法来实现延迟跳转的目的. 补充:Handler的常用方法: // 立即执行Runnable对象 public final ...
- 20145239杜文超《网络攻防》- MSF基础应用
20145239杜文超<网络攻防>- MSF基础应用 基础问题回答 1.用自己的话解释什么是exploit,payload,encode? exploit:实现攻击行为的主体,但没有载荷只 ...
- matplotlib模块之子图画法
一般化的子图布局 首先要创建各个子图的坐标轴,传入一个四元列表参数:[x,y,width,height],用来表示这个子图坐标轴原点的x坐标.y坐标,以及宽和高.值得注意的是,这四个值的取值范围都是[ ...
- HDU 3466 Proud Merchants 排序 背包
题意:物品有三个属性,价格p,解锁钱数下线q(手中余额>=q才有机会购买该商品),价值v.钱数为m,问购买到物品价值和最大. 思路:首先是个01背包问题,但购买物品受限所以应先排序.考虑相邻两个 ...
- linux设置系统时间与时区以及设置bios时间同步系统时间
有装过Linux系统的人,可能都会有这样的经历,就是该机器安装windows系统时,时间正确,但是安装了linux系统后,尽管时区选择正确,也会发现系统时间不对.这是由于安装系统时采用了UTC,那么什 ...
- struts2中常用配置
1.Post提交乱码问题,如果编码采用的是utf-8,那么默认不需要自己处理,因为其默认的常量配置文件就是处理UTF-8的 这个常量值只处理POST提交,get如果乱码还得自己写拦截器处理,一般只要页 ...
- Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- DecimalFormat数据格式函数
DecimalFormat数据格式函数 class FormatDemo2{ public void format(String pattern, double value) { DecimalFor ...
- CLR事件与路由事件在XAML代码中应用时的区别
<Window x:Class="Demo_window.Window2"xmlns="http://schemas.microsoft.com/winfx/200 ...
- PHP版微信第三方实现一键登录及获取用户信息的方法
本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请. 一开始你需要进入微信 ...