WebPack牛刀小试
现在页面的功能和需求越来越复杂,繁复杂乱的JavaScript代码和一大堆的依赖包都需要包含在前端页面中。如果还用手动处理就有点像在现代战场上使用小米加步枪的味道了。
为了减小开发的复杂度,前端社区涌现出了层出不穷的实践方案,比如TypeScript扩展语言、SCSS、LESS类的CSS预处理器,还有模块化思想等。这些新兴技术的出现一定程度上提高了我们的编程效率,然而它们还不能被浏览器直接识别。手动处理它们又无疑会显得效率不高,同时早期一些模块打包器不能完全满足目前大型项目对代码分割和静态资源无缝模块化的迫切需求,因此,WebPack应运而生了。
今天,本文就向你介绍这款前端工具WebPack。
一、什么是WebPack?
我们先来看看官方解读:
WebPack 是一个现代 JavaScript 应用程序的模块打包器(module bundler),它将你的项目作为一个整体,通过入口文件(如index.js)找到所有的依赖文件,并递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后使用loaders将所有这些模块打包成少量的(通常只有一个)、浏览器可以识别的bundle,再交给由浏览器去加载。其目的就是解决现在前端越来越复杂的文件依赖问题。
如下图所示:
通俗的讲,WebPack通过分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),将其转换和打包为合适的格式供浏览器使用,并根据指定的规则实现静态资源的分类合并,减少页面请求。
二、为什么要用WebPack?
简单的说,使用工具当然是为了提升效率啦~~
WebPack的以下几大优势使得它深受前端开发人员的喜爱:
·模块化:它能把各种资源,如JS、coffee、样式(含less/scss)、图片等都作为模块来使用和处理,把复杂的程序简单化
·方便旧代码迁移:它的脚本使用CommonJS形式来书写,并提供对AMD/CMD的支持,因此很方便的就可以把旧代码迁移
·可扩展性强:WebPack有一个智能解析器,能处理几乎所有的第三方库,支持多种插件
可以说,可扩展性强是WebPack的最大优势和特色了,在当今这个快速更迭的前端行业,不支持各种插件就等于是没有前景可言,WebPack支持多种多样的插件,能够满足你对各种插件的依赖。
三、如何使用WebPack?
首先需要将WebPack进行全局安装,在本地建立一个空的项目文件夹,如WebPack test,在文件夹目录下打开终端,输入:
npm install –g WebPack
如下图所示:
安装完成后,你可以手动到项目目录下建立一个package.json文件,来增加项目的描述信息,如项目名、版本、入口文件等等,也可直接在终端输入命令:
npm init
这将会自动在根目录下创建该文件,命令会自动提示你输入项目的相关信息,你可以自行定义,也可以直接回车使用默认值,如下图所示:
由于WebPack是全局安装的,我们需要将其加入项目中,作为依赖包使用,继续执行如下命令:
npm install ——save-dev WebPack
此时我们的项目文件中将会出现相关的依赖包node_modules.之后,你就可以创建自定义的文件目录来存放项目的相关文件啦~~
例如,我们可以在项目的根目录下创建两个文件夹src和template,分别用来存放自己编写的js文件和WebPack打包生成的文件,然后再创建一个index.html文件放在根目录下作为展示页面,index.html的内容如下。
接下来我们需要在src文件夹下实现两个js文件,作为WebPack打包的源文件,分别为root.js和node.js.两个文件的内容如下图所示。
这两个文件中root.js需要依赖node.js的实现,同时我们将root.js作为WebPack打包的入口文件。这里为了便于后续文章内容的理解,先阐明WebPack的四个核心概念:入口(entry)、输出(output)、loader、插件(plugins)。
入口(entry)是WebPack打包各个文件依赖关系的起点(entry point),它告诉 WebPack 从哪里开始,并根据依赖关系图确定需要打包的内容。
输出(output)是告诉WebPack如何去处理这些打包文件,并且最终这些打包内容生成到哪里。
Loader是WebPack中相对比较重要的一个概念,它需要识别出(identify)应该被对应的 loader 进行转换(transform)的那些文件并且转换这些文件,从而使其能够被添加到依赖图中。
插件(plugins)相对于Loader而言的不同之处在于Loader 仅在每个文件的基础上执行转换,而插件(plugins) 更常用于在打包模块的 “compilation” 和 “chunk” 生命周期执行操作和自定义功能。
为了方便地对项目依赖文件进行编译,WebPack允许我们通过配置文件的方式把所有与打包相关的信息放到里面,提高编译效率。
那么我们要如何来写这个配置文件呢?
首先我们需要在项目的根目录下创建一个名为webpack.config.js的文件,文件中配置内容如下:
其中entry就是我们前面提到的入口文件,需要在配置项中告诉WebPack编译器我们要去哪里寻找项目的入口文件;output配置项则定义了编译后的打包文件的输出目录和文件名称,其输出目录由path项指定,文件名称则由filename指定。本文中以前面创建的template目录作为打包文件的输出路径。
然后我们就可以执行WebPack的编译命令了,我们需要在终端进入到项目的根目录下然后执行WebPack,该命令会自动使用webpack.config.js中的配置内容。
配置完成后,在根目录打开index.html文件,即可看到意料之中的结果啦~
在实际项目中,可能有多种WebPack命令,这些命令往往是比较复杂的。为此,我们可以通过配置npm来代替他们,通常是“npm run +配置命令”的形式,而这些配置则是在package.json文件中的script标签中完成的,且可以设置多个不同的json对象值。其中,start命令是npm内置的特殊命令,其执行不需要加额外的run命令,直接输入npm start即可执行。
由上图可知,经过script配置后,通过npm start命令可以实现与WebPack命令同样的打包结果。
值得注意的是,打包之后的文件是很不容易找到对应的源文件的,这也就很不利于我们的调试工作。别着急,这些问题WebPack早就替你想到了,所以它还提供了一个Source Maps功能,来获取源文件和编译后文件的对应关系,只需要简单地配置devtool,就可以很容易地在调试时定位错误,大大提升了开发调试效率。
在实际开发过程中,我们希望对代码的修改能及时自动反映在浏览器中,而不是总是手动编译运行。为此WebPack提供了一个可选的本地开发服务器,该服务器基于node.js构建,是一个单独的组件,要配置它需要提前安装该服务器作为项目的依赖,在终端运行以下命令即可完成安装。
npm install ——save-dev WebPack-dev-server
然后,需要对devserver进行配置,有以下四个内容:
·contentBase:设置提供服务器的项目目录
·port:设置浏览器的监听端口
·inline:true,设置为true表示浏览器会自动监听端口并时时刷新页面
·historyApiFallback:设置页面是否自动跳转
在此基础上,还需要在package.json文件的script对象中加上一个json对象“server”: “WebPack-dev-server ——open”,此时,本地服务器的配置就大功告成了!
尝试着在终端运行命令:
npm run server
以上就是WebPack的基本功能啦,用它来打包我们的项目灰常的简单~~
千万别以为只有这点功能而小看了WebPack!在实际的项目开发过程中,我们更需要的是它强大的其他特性,比如loaders、plugins插件等,这些都可以根据自己的需要进行配置~~
WebPack牛刀小试的更多相关文章
- JavaScript 模块化入门
理解模块 模块打包构建 webpack牛刀小试
- webpack之牛刀小试 打包并压缩html、js
1.创建项目文件夹test,在文件夹下创建src文件夹用来存放源码,在src文件夹下创建index.html/index.js两件文件. 我们的最终目的是将这两个文件打包压缩并输出到/test/dis ...
- [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门
一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...
- webpack第一节(2)
安装webpack在文件夹中 安装完成如图所示 牛刀小试 在webpack-test根目录下新建一个hello.js (不新建在node-modules文件夹下面的目的是,该文件夹是webpack的依 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- webpack之傻瓜式教程
接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...
- 细说前端自动化打包工具--webpack
背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...
- Webstorm+Webpack+echarts构建个性化定制的数据可视化图表&&两个echarts详细教程(柱状图,南丁格尔图)
Webstorm+Webpack+echarts ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(I ...
- 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert
使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...
随机推荐
- PHP匿名函数
PHP匿名函数 匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值. 举例: &l ...
- C语言 统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入)
//凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> void main(){ , num=, blank=, ...
- 我的BRF+自学教程(三):动态技术
开发者们可以在编程中使用各种动态技术,比如RTTS,比如通过动态的类创建和多态来实现功能的平滑扩展.BRF+开发中也存在一些动态手段.本文将介绍3种不同场景下的动态实践方式.其中第一种是纯配置的,第二 ...
- 《Java大学教程》—第5章 数组
5.6 增强的for循环:访问整个数组,读取数组元素,不基于数据下列5.7 数组方法:最大值.求和.成员访问.查找 1.答:P92存储固定个数相同数据类型的一组元素. 2.答:P92所有存储在一个特定 ...
- 解决:Vue刷新/载入页面,出现双括号闪现后消失
https://cn.vuejs.org/v2/api/#v-cloak v-cloak 不需要表达式 用法: 这个指令保持在元素上直到关联实例结束编译.和 CSS 规则如 [v-cloak] { d ...
- nginx配置tomcat负载均衡,nginx.conf配置文件的配置
- 【JAVA8】双冒号
现在JDK双冒号是: public class MyTest { public static void printValur(String str){ System.out. ...
- windows 增加右键功能 -->用命令行打开
windows 增加右键功能 -->用命令行打开 实现 注册表 以管理员权限CMD 到指定文件夹 Windows Registry Editor Version 5.00 [HKEY_CLASS ...
- [matlab] 19.matlab 基础几何学
polyshape 函数可创建由二维顶点定义的多边形,并返回具有描述其顶点.实心区域和孔的各种属性的 polyshape 对象.例如,pgon = polyshape([0 0 1 1],[1 0 ...
- 机器学习之MCMC算法
1.MCMC概述 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC).之前已经介 ...