webpack4.0介绍与使用

---恢复内容开始---

1:webpack的基本使用:

##在网页中会引用那些静态资源:

  js, css, images, 字体文件和模板文件(.vue)等  

##网页总引用静态资源多了以后会有那些问题:

  网页加载速度慢,因为会发起很多二次请求,script标签,link标签,遇到src都会发起请求,随意一个页面要完整显示出来发送的请求数应该由资源数量决定

  处理各种依赖关系

##解决办法:

  合并,压缩,精灵图,图片的base64图片(第一次请求是图片转成base64字符串直接放到页面中,荷叶面一起返回,使用过于小图片)

  使用requireJs 或者webpack来解决依赖关系

##什么是webpack:

  webpack是一个前端项目构建工具,基于Node.js开发出来的

##如何完美实现上述的2中解决方案:

  1:使用Qulp,是基于task任务的

  2:使用webpack,是基于整个项目进行构建的

    +借助webpack这个前端自动化构建工具,可以完美的实现资源的合并,压缩混淆等诸多功能。

    +根据官网图片接收webpack打包过程

##webpack安装的而两种方式:

  1:运行 npm i webpack -g 全局安装webpack,这样能在全局使用webpack命令

  2:在项目根目录中运行 npm i webpack --save--dev 安装到项目依赖中

##创建根目录文件

  执行 npm init 指令会自动生成一个package.json文件

  在项目根目录中执行 npm i jQuery

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--不推荐在这里引用任何包和任何css样式文件,因为会发起二次请求,所有包都在main.js中导入-->
    <script src="./main.js"></script>
</head>
<body>

    <ul>
        <li>这是第1个i</li>
        <li>这是第2个i</li>
        <li>这是第3个i</li>
        <li>这是第4个i</li>
        <li>这是第5个i</li>
        <li>这是第6个i</li>
        <li>这是第7个i</li>
        <li>这是第8个i</li>
        <li>这是第9个i</li>
        <li>这是第10个i</li>
    </ul>

</body>
</html>

main.js:

//这是main.js是我们项目的js入口文件

//1:a导入jQuery,引入jQuery包用$变量接收,此方法与node中 const $ = require(‘jquery‘) 同//此为ES6中导入模块的方式//由于ES6的语法太高级,浏览器解析不了次引入方式import $ from ‘jquery‘

$(function(){    $(‘li:odd‘).css(‘backgroundColor‘,‘lightblue‘);    $(‘li:even‘).css(‘backgroundColor‘,function(){        return ‘#‘+‘D97634‘    })})

  会报错import语法错误,因为浏览器解析不了,所以要webpack将main.js打包到dist/bundle.js中

  执行命令 ‘webpack ./src/main.js -o ./dist/bundle.js‘(这是webpack4.0版本以上这样用,4.0以下没有其中的‘-o’)

  因为main.js中的代码,涉及到了ES6的新语法,但是浏览器不识别,所以使用webpack前端构建工具,把main.js做了处理打包,生成了一个bundle.js

  修改后的index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--不推荐在这里引用任何包和任何css样式文件,因为会发起二次请求,所有包都在main.js中导入-->
    <!--因为main.js中的代码,涉及到了ES6的新语法,但是浏览器不识别-->
    <!--<script src="./main.js"></script>-->
    <!--解决办法,使用webpack前端构建工具,把main.js做了处理打包,生成了一个bundle.js-->
    <script src="../dist/bundle.js"></script>
</head>
<body>

    <ul>
        <li>这是第1个i</li>
        <li>这是第2个i</li>
        <li>这是第3个i</li>
        <li>这是第4个i</li>
        <li>这是第5个i</li>
        <li>这是第6个i</li>
        <li>这是第7个i</li>
        <li>这是第8个i</li>
        <li>这是第9个i</li>
        <li>这是第10个i</li>
    </ul>

</body>
</html>

  此时效果:

##经过此演示,webpack可以做什么:

  1:webpack能狗处理js文件之间的复杂依赖关系

  2:webpack能够处理js的兼容问题,把高级的浏览器不识别的语法,转化为低级的浏览器识别的语法

2:webpack最基本的配置文件的使用:(此方法【常用】替代指令【webpack ./src/main.js -o ./dist/bundle.js】生成打包文件bundle.js)

  ##首先在文件根目录下添加文件名为:webpack.config.js 的js文件

  webpack.config.js:

const path = require(‘path‘) //node操作URL要用path模块

//node语法
//这个配置文件就是一个js文件,通过node中的模块操作,向外暴露了一个配置对象
module.exports = {
    //在配置文件中需要主动指定入口和出口
    entry:path.join(__dirname,‘./src/main.js‘),//入口,表示webpack要打包那个文件
    output:{//输出文件相关配置
        path:path.join(__dirname,‘./dist‘),//指定,打包好的文件,输出到那个目录中去
        filename: ‘bundle.js‘//指定输出文件名称
    }
}

  然后在根目录执行命令:‘webpack’ 的道结果如下图:

  ##当在控制台直接输入 webpack 命令执行的时候,webpack 做了一下几步:

    1:首先 webpack 发现,我们并没有通过命令的形式,给它指定入口和出口;

    2: webpack 就会去项目的根目录中,查找一个叫做 ‘webpack.config.js’ 的配置文件

    3:当找到配置文件后,webpack 会去解析执行配置文件,当解析执行完配置文件后就得到了配置文件中导出的配置对象

    4:当webpack 拿到配置对象后,就拿到了配置对象中,指定的入口和出口,然后进行打包构建

3.webpack-dev-server的基本使用:(使用此工具来实现自动打包编译的功能)

  ##执行命令在项目根目录下安装此工具:npm i webpack-dev-server

  ##安装完毕后,这个工具的用法和 webpack 命令的用法,完全一样

  ##由于,我们是在项目中,本地安装的 webpack-dev-server,所以无法把她当作脚本命令在powerhell终端中直接运行(只有那些安装到全局 -g 的工具,才能在终端中正常运行)

  ##注意:webpack-dev-server 这个工具,如果想要正常运行,要求在本地项目中必须安装 webpack,项目根目录执行命令:npm i webpack -D

{
  "name": "bms-vue",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "jquery": "^3.4.1",
    "webpack-dev-server": "^3.4.1"
  },
  "devDependencies": {},
  "scripts": {//配置一些要运行的命令
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev":"webpack-dev-server" //当执行 npm run dev 的时候会执行辞指令
  },
  "author": "",
  "license": "ISC"
}

  注:如果因为重复装包而导致错误,可以将 node-nodules 删掉,执行 npm i 指令,其中 scripts 节点中用来配置一些要运行的命令,其中 "dev":"webpack-dev-server" 表示当执行 npm run dev 的时候会执行指令:webpack-dev-server

  ##到此为止执行指令:npm run dev 之后修改js文件,控制台显示确实是自动编译了,下图变是执行完指令后的控制台显示:

  如图可看到:webpack output is served from / 意为:webpack输出文件正在被根目录托管,因此 main.js 被自动打包的bundle.js 和 dist 下面的 bundle.js 并非同一文件,只是自动打包的bundle.js无法看到,但可以通过 http://localhost:8080/ 访问到

  因此也可以用script标签引用如:<script src=‘/bundle.js‘></script>,所以要将 index.html 中的 <script src="../dist/bundle.js"></script> 替换掉即可。

  ## webpack-dev-server 帮我们打包成的bundle.js文件,并没有存放到物理磁盘上,二是直接托管到了电脑的内存中,所以我们在项目中根本找不到这个打包好的bundle.js

  ## 我们可以认为,webpack-dev-server 把打包好的文件,以一种虚拟的形式托管到了咱们的项目根目录中,虽然我们看不到它,但是可以认为和 dist     src     node_modules 平级,有一个看不见的文件叫bundle.js。(快)

3.1 webpack-dev-server的常用命令:

  package.json文件:

  ##指令解析:空格代表传参(推荐方式)

    1:webpack-dev-server :自动打包

    2:--open 执行完 npm run dev 启动完毕后自动打开浏览器访问项目

    3:--port 3000 自定义项目启动端口为3000

    4:--contentBase src 自动打开浏览器的位置为根目录下的是src中的index.html

    5:--hot 不会重新打包,相当于打补丁,减少不必要的代码重新打包编译,并且浏览器会无刷新重载

4 html-webpack-plugin的两个基本作用(将页面放到内存中)

  ##以上所演示的页面是本地磁盘中的index.html,下面将此HTML页面也放到内存中

    1:首先执行命令:npm i html-webpack-plugin 加载插件

    2:webpack.config.js中添加第一步:如图

    3:webpack.config.js中添加第二部:如图

    最后webpack.config.js文件变为:

const path = require(‘path‘) //node操作URL要用path模块

//导入在内存中生成html页面的插件
//只要是插件都要放到plugin节点中去
const htmlWebpackPlugin = require(‘html-webpack-plugin‘)

//node语法
//这个配置文件就是一个js文件,通过node中的模块操作,向外暴露了一个配置对象
module.exports = {
    //在配置文件中需要主动指定入口和出口
    entry:path.join(__dirname,‘./src/main.js‘),//入口,表示webpack要打包那个文件
    output:{//输出文件相关配置
        path:path.join(__dirname,‘./dist‘),//指定,打包好的文件,输出到那个目录中去
        filename: ‘bundle.js‘//指定输出文件名称
    },
    plugins: [//配置插件的节点
        new htmlWebpackPlugin({//创建一个在内存中生成HTML页面的插件
            template: path.join(__dirname,‘./src/index.html‘),//指定模板页面,将会根据指定的页面路径,去生成内存中的页面
            filename: ‘index.html‘,//指定生成的页面的名称
        })

    ]
}

    ##使用此插件之后,无需手动引用打包成的bundl.js,插件会将内存中的bundle.js自动添加到内存页面中

原文地址:https://www.cnblogs.com/lubolin/p/10912196.html

时间: 2024-11-05 22:08:10

webpack4.0介绍与使用的相关文章

webpack4.0打包的时候一些技巧

4.0的webpack要比之前的版本强大的不是一点点 打包的时候也做了很多优化 然后说一些这段时间发现的有趣的技巧 1. 打包出来的文件很大,不知道是什么原因可以用 webpack-bundle-analyzer 很牛逼的分析工具,能知道打包出来的文件的都来自于属什么地方,每个有多大 使用方法很简单 1. 引入 2. 放到插件里 const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

webpack4.0各个击破(4)—— Javascript &amp; splitChunk

目录 一. Js模块化开发 二. Js文件的一般打包需求 三. 使用webpack处理js文件 3.1 使用babel转换ES6+语法 3.2 脚本合并 3.3 公共模块识别 3.4 代码分割 3.5 代码混淆压缩 四. 细说splitChunks技术 4.1 参数说明 4.2 参数配置 4.3 代码分割实例 五. 参考及附件说明 webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建

webpack4.0各个击破(9)—— karma篇

webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法.(本篇中的参数配置及使用方式均基于webpack4.0版本) 一. webpack与自动化测试 webpack对应的关键词是模块化,它的主要任务就是打包和管理模块,所以首先需要明确的概念就是webpack之所以关联自动化测试,是因为它能够为测试脚本提供模块管理的能力,

webpack4.0各个击破(10)—— Integration篇

webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法.(本篇中的参数配置及使用方式均基于webpack4.0版本) 一. Integration 下文摘自webpack中文网: 首先我们要消除一个常见的误解,webpack是一个模块打包工具(module bundler),它不是一个任务执行工具,任务执行器是用来自动化处

(一)WebPack4.0 从零开始

一:WebPack基础知识 (1):webpack的定义 webpack官网给出的定义是:webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). (2):webpack的四个核心概念 入口(entry) 输出(output) loader plugins(插件) 本文简单的说一下webpack的四大核心概念,更详细的内容可自行参考webpack的官方文档(https://www.webpackjs.com/concepts/). 入口文件(e

手把手带你掌握新版Webpack4.0

课程介绍:Webpack 目前无论在求职还是工作中,使用越来越普及.而想要学懂,学会Webpack更绝非易事.本课程完整讲清最新版本下的 Webpack 4 知识体系,通过 基础 + 实例 + 原理代码编写 + 复杂案例分析 完成Webpack4的分析与讲解.更重要的是让你对整个前端项目的构建有一个全局化的认识,实现能力思想双升级. 课程目录:第1章 课程导学(打消你的学习疑虑)掌握Webpack越来越成为前端工程师的标配技能,本章会对课程整体进行介绍,打消你的学习疑虑.1-1 课程导学 第2章

开放平台鉴权以及OAuth2.0介绍

OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容. OAuth 2.0不兼容1.0. 协议的参与者 RO (resource owner): 资源所有者,对资源具有授权能力的人. RS (resource server): 资源服务器,它存储资源,并处理对资源的访问请求. Client: 第三方应用,它获得RO的授权后便可以去访问RO的资源. AS (authoriz

转:Selenium2.0介绍——WebDriver两种驱动浏览器的方式

如果之前熟悉Selenium RC,理解了Selenium RC是如何工作的,那么,当第一次接触Selenium WebDriver的时候,看到WebDriver居然可以不需要指定远端服务器的IP地址和端口号的,一定会惊讶的. 事实上,WebDriver有两种方式“驱动”浏览器的方式.1. Selenium Server:和Selenium RC一样的,通过指定远端服务器IP地址和端口号,由这个远端服务器来驱动浏览器.2. 直接调用:无须指定任何服务器IP地址和端口号.直接使用本地的浏览器(只要

阿里云开源离线同步工具DataX3.0介绍

阿里云开源离线同步工具DataX3.0介绍 一. DataX3.0概览 ? DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效的数据同步功能. 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源.当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数