现在页面的功能和需求越来越复杂,繁复杂乱的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牛刀小试的更多相关文章

  1. JavaScript 模块化入门

    理解模块 模块打包构建 webpack牛刀小试

  2. webpack之牛刀小试 打包并压缩html、js

    1.创建项目文件夹test,在文件夹下创建src文件夹用来存放源码,在src文件夹下创建index.html/index.js两件文件. 我们的最终目的是将这两个文件打包压缩并输出到/test/dis ...

  3. [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门

    一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...

  4. webpack第一节(2)

    安装webpack在文件夹中 安装完成如图所示 牛刀小试 在webpack-test根目录下新建一个hello.js (不新建在node-modules文件夹下面的目的是,该文件夹是webpack的依 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. webpack之傻瓜式教程

    接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...

  7. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  8. Webstorm+Webpack+echarts构建个性化定制的数据可视化图表&&两个echarts详细教程(柱状图,南丁格尔图)

    Webstorm+Webpack+echarts   ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(I ...

  9. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

随机推荐

  1. 便捷的方式在手机上查看Unity3D的Console Log(调试信息 日志)

    Logs Viewer 功能描述 Using this tool you can easily check your editor console logs inside the game itsel ...

  2. python创建列表和向列表添加元素方法

    今天的学习内容是python中的列表的相关内容. 一.创建列表 1.创建一个普通列表 >>> tabulation1 = ['大圣','天蓬','卷帘'] >>> ...

  3. Servlet(四):转发与重定向、路径问题

    在上次的小案例中用到了转发的技术,今天来仔细聊聊转发和重定向的问题,以及一些小知识的汇总. 一.转发 1.转发的概念 转发主要是将浏览器的请求交给另外一个servlet或jsp来处理,借助reques ...

  4. Linux 小知识翻译 - 「代理服务器」

    这回聊聊「代理服务器」. 在公司里,不通过代理服务器无法连接互联网的,由于代理服务器的原因,有些服务的使用是受到限制的. 有人可能会觉得为什么会存在这种东西?(这里指代理服务器) Proxy本来的意思 ...

  5. IT部门不应该是一个后勤部门

    管理上最大的问题在于不重视预算与核算的管理.从管理层到员工,很少有经营的念头,只是一味地埋头做事.西方企业总结了当今几百年的经营理念,最终把企业一切活动的评价都归结到唯一的.可度量的标准上:钱来度量. ...

  6. Vue项目使用webstorm开发 保存浏览器不自动更新问题

    1.首先进去编辑器的设置页面 2.按照以下步骤进行操作,把如下选项的√去掉即可:

  7. linux下的文件目录结构

    linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录 - root,存放root用户的相关文件 - home,存放普通用户的相关文件 - b ...

  8. 解决.NET Web API生成的Help无Controller说明&服务端接收不到请求

    今天在用.NET Web API写一个接口的时候遇到一个问题.在Controller中新加了一个方法,客户端就不能请求接口了,当时建WEB API项目是用的VS默认设置,在服务端打断点一直没有进去,而 ...

  9. P2089 烤鸡(搜索简单题)

    题意:就是x分别是1到3的未知数,求x1+x2+x3.....+x10=n的方案数和输出每种方案.每种方案还必须按字典序输出 思路:就是简单的构建搜索树+约束条件啊,其实数据范围一点都不大,所以,我第 ...

  10. 【转】让Xcode支持iOS12.0 设备真机测试(不断更新真机支持包)Xcode 真机测试 iOS

    最新支持12.0 (16A366)! 所有真机包都是同一大版本号向下兼容.例如12.0 Beta6的真机包,是可以兼容12.0 Beta2及Beta1的. 12.0 (16A366)正式版可用!所有低 ...