Webpack快速入门(一)

本文可供Webpack新手与Webpack老手复习之参考。注:本文基于当前最新的webpack V4.29.5;本文示例操作步骤在Mac下实现。

前提

(1)具有一定JavaScript基础
(2)了解npm基本使用

什么是Webpack?

有文(参考(2))说“WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用”。
而官方的解释是“Webpack is used to compile JavaScript modules”,中文意思是“Webpack用于编译JavaScript模块”。或者在官方网站上的另一个说法是“At its core, webpack is a static module bundler for modern JavaScript applications. When webpack processes your application, it internally builds a dependency graph which maps every module your project needs and generates one or more bundles.”,中文意思是“webpack的核心是现代JavaScript应用程序的静态模块捆绑器。 当webpack处理您的应用程序时,它会在内部构建一个依赖关系图,它映射您的项目所需的每个模块并生成一个或多个包。”

作为基本的入门理解,先看一下下图知道Webpack的作用就可以了。

总之,Webpack功能很强大,是你立志于学习JavaScript从业开发的必需之一。

快速入门示例

第一步

创建示例工程文件夹并进入其中。

mkdir ex1 && cd ex1

第二步

在工程文件夹创建配置文件package.json。
npm init -y

注:参数-y说明在创建配置文件时的一些系统提示都选择默认。完成后的文件package.json内容如下:

{
  "name": "ex1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
   }
}

其中的很多内容相信你一看就明白,不明白的暂时不必理会。

第三步

在本地安装Webpack及其命令行。
说明:建议你使用本地安装方式,这样不需要时删除即可,不至于在老留在全局存储中占用空间。另外,我们先从最简单最基本的命令行方式入手,所以,也要把webpack的命令行一起安装。
npm install webpack webpack-cli --save-dev

上述命令先后安装了两个命令:webpack和它的命令行webpack-cli。其中,参数--save-dev指明把这两个模块版本信息保存到devDependencies(开发环境依赖)中,即你的package.json文件的devDependencies字段中。

之后,文件package.json内容变成如下模样:

{
  "name": "ex1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.29.5",
    "webpack-cli": "^3.2.3"
  }
}

第四步

我们在本文最基本示例中,要创建的文件夹结构如下图所示:

其中,app文件夹用来存放原始数据和我们即将创建的JavaScript模块,public文件夹用来存放之后供浏览器读取的文件(包括使用webpack打包生成的js文件以及一个index.html文件)。



首先,创建index.html文件,其内容是一些最基础的html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>


然后,稍微修改一下,变成如下模样:

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id=‘root‘>
</div>
<script src="bundle.js"></script>
</body>
</html>

注意:在这里引用了一个名为bundle.js的文件。此文件将是我们稍后打包本示例中多个js文件后的结果文件。



然后,创建app文件夹下的Greeter.js文件,内容如下:

module.exports=function () {
    var greet=document.createElement(‘div‘);
    greet.textContent=‘Hi, this is ABC to webpack!‘;
    return greet;
}

此文件(模块)的作用也很简单:创建HTML文档中的一个DIV元素,并返回此元素。
最后,看一下app文件夹下的main.js文件,内容如下:

 const greeter=require(‘./Greeter‘)
document.querySelector(‘#root‘).appendChild(greeter());

作用是:引用上面的Greeter.js文件(模块),并查询上面HTML文件中名字为root的DIV元素,然后在其后加入由文件Greeter.js文件创建并返回的DIV元素。

第五步----关键步骤

在命令行下运行webpack实现捆绑已有js文件并生成新的js文件的任务。

注意,webpack不带配置文件的命令行使用格式如下:

webpack <entry> [<entry>] -o <output>

即webpack命令后面跟两部分,第一部分是一个或者一组输入js文件,用于由它们捆绑生成后面的输出文件。第二部分,由参数-o指出,对应捆绑生成的结果js文件。那么,在本例中,如果我们使用如下命令会有什么结果呢:

webpack app/main.js -o public/bundle.js

结果可能会出乎你的意料,系统提示如下:

webpack: command not found

为什么出现没有找到命令呢?原因是在本文最开始时我们仅以局部方式安装了webpack,而没有以全局方式安装(避免全局系统内容“污染”)。
其实,正确的答案应该是:
npx webpack app/main.js -o public/bundle.js

那么,这个npx是什么呢?

原来从npm 5.2.0以后,其自带了一个npx文件,称为npm包执行器。npx 会自动帮助我们执行依赖包里的二进制文件。具体细节在此省略,有兴趣的朋友可参考文后(3)。

到此,在public文件夹下生成bundle.js文件。而且,令人惊喜的是,webpack会自动根据上面js文件中的内部引用逻辑,自动搜索。例如,上面main.js文件中引用了Greeter.js,这个便由webpack自动分析出来。然后,对这个main.js文件进行编译解析,最后出现结果文件bundle.js到目标路径下。
作为提醒,如果各位对c/c++/java等语言的编译、链接机制有所了解的话,您便不难理解这其中的逻辑,webpack正是完成了类似的自动的根据内部各文件间的引用路径完成指定任务。



最后,运行Index.html文件,此文件自动引用由上面webpack运行得到的那个bundle.js文件,并最终输出结果如下:

Hi, this is ABC to webpack!

有关webpack的其他用法及进一步解释,我们后面再专门继续介绍。怎么样?对webpack的功用有些了解了吧?

参考

(1)https://www.npmjs.com/
(2)https://segmentfault.com/a/1190000006178770?utm_source=tag-newest
(3)https://blog.csdn.net/csdn_yudong/article/details/81670477

原文地址:http://blog.51cto.com/zhuxianzhong/2351906

时间: 2024-10-08 08:32:10

Webpack快速入门(一)的相关文章

webpack快速入门和实战

webpack是什么 Webpack 是一个模块打包器.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 这张图基本上解释了webpack是用来干嘛的,将一些相互依赖的模块(文件),打包成一个或多个js文件,减少http请求次数,提升性能.这些相互依赖的模块可以是图片.字体.coffee文件.样式文件.less文件等. 1. 安装 先安装 install node.js node.js包含一个包管理器:npm 基本命令 webpack // 最基本的启动web

webpack快速入门——webpack3.X 快速上手一个Demo

1.进入根目录,建两个文件夹,分别为src和dist 1).src文件夹:用来存放我们编写的javascript代码,可以简单的理解为用JavaScript编写的模块. 2).dist文件夹:用来存放供浏览器读取的文件,这个是webpack打包成的文件. 2.在dist下建立一个index.html文件,写入以下代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-

webpack快速入门——配置JS压缩,打包

1 .首先在webpack.config.js中引入 const uglify = require('uglifyjs-webpack-plugin'); 2.然后在plugins配置里 plugins:[ new uglify() ] 3.在终端输入webpack,你会发现JS代码已经被压缩了,如果你用的是VSCode,可以按住Alt+Z代码自动换行,查看效果 4.上图

webpack快速入门——插件配置:HTML文件的发布

1.把dist中的index.html复制到src目录中,并去掉我们引入的js 2.在webpack.config.js中引入 const htmlPlugin = require('html-webpack-plugin'); 3.引入后进行安装   cnpm i html-webpack-plugin --save-dev 4.在webpack.config.js中进行插件配置 new htmlPlugin({ minify:{ removeAttributeQuotes:true }, h

Webpack快速入门(二)

在前文中,已经成功使用Webpack打包并生成了一个目标.js文件.但是,在终端中进行复杂的操作,显然是不太方便且容易出错的.接下来,让我们学习Webpack的另一种更常见的使用方法,即通过配置文件来使用Webpack.这也是webpack的重点使用方式. 首先,提醒注意的是,我们要学习的这个配置文件其实也是一个简单的JavaScript模块文件,我们可以把所有的与打包相关的信息放在里面.通过一个js文件来实现配置功能的一个重要好处是,你可以在其中加入灵活多样的注释--在.json配置文件中是非

Webpack快速入门(三)

作为前两篇的补充,本文想再说明一下npx命令相关的另一种实现. NPM Scripts 在前面的文章中,我们提到使用如下命令方式: npx webpack ...... 于是,位于"./node_modules/.bin/webpack"便会被执行.这得益于npx这个命令. 其实,还有另外一种方式,更为常用,即借助于npm run命令和package.json配置文件中的"scripts"键. 示例 请看下面的配置文件: { "name": &q

Webpack快速入门

什么是Webpack 顾名思义它是一个前端打包工具,通过给定的入口文件自动梳理所有依赖资源(包括css.图片.js等),并按照配置的规则进行一系列处理(转es5.压缩等),打包生成适合现代生产环境要求的文件.同时也借此竖起技术壁垒,防止后端改代码[滑稽]. npm基本操作 现今前端体系构建在node之上,npm是node的包管理器.webpack.babel等只是工具包,都通过npm安装. 初始化新项目 npm init 全局安装依赖包PACKAGE,不属于具体哪个项目 npm install

Webpack v4.8.3 快速入门指南

一.进入 https://webpack.docschina.org/ 官方文档,点击 "文档" 进入 文档页面,文档中包含  "概念,配置,API,指南,LOADERS,插件"  6项: 二.点击 "指南" 选项,阅读快速入门指南: 原文地址:https://www.cnblogs.com/heroljy/p/9054790.html

微服务的入门级微框架Spring Boot快速入门

详情请交流  QQ  709639943 00.微服务的入门级微框架Spring Boot快速入门 00.基于java的微信公众号二次开发视频教程 00.leetcode 算法 面试 00.北风网 零基础到数据(大数据)分析专家-首席分析师 00.快速上手JMeter 00.Jmeter 00.2017年Java web开发工程师成长之路 00.R语言速成实战 00.R语言数据分析实战 00.Python+Django+Ansible Playbook自动化运维项目实战 00.Java深入微服务