一、Webpack介绍与基本使用

1.1、Webpack是什么?

Webpack 是一个静态资源打包工具。

它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去。

输出的文件就是编译好的文件,就可以在浏览器段运行了。

我们将 Webpack 输出的文件叫做 bundle

1.2、功能介绍

  • 开发模式:仅能编译 JS 中的 ES Module 语法

  • 生产模式:能编译 JS 中的 ES Module 语法,还能压缩 JS 代码

1.3、开始使用

1.3.1、资源目录

webpack_code # 项目根目录(所有指令必须在这个目录运行)
└── src # 项目源码目录
├── js # js文件目录
│ ├── count.js
│ └── sum.js
└── main.js # 项目主文件

1.3.2、创建文件

项目结构:创建了一个空的根目录,在根目录下面创建一个 src 目录,src 目录下是main.js(入口文件)和 js目录(包含了count.js、sum.js)

创建 count.js 代码如下:

export default function count(x, y) {
return x - y;
}

sum.js 代码如下:

// 可变参数
export default function sum(...args) {
return args.reduce((p, c) => p + c, 0);
}

main.js 代码如下:

import count from "./js/count";
import sum from "./js/sum"; console.log(count(2, 1));
console.log(sum(1, 2, 3, 4));

1.3.3、下载依赖

 初始化 package.json,生成一个基础的 package.json 文件,命令如下:

npm init -y

下载依赖 webpack 和 webpack-cli 命令如下:

npm i webpack webpack-cli -D

下载完依赖后,项目总体结构:

1.3.4、使用 Webpack

 开发模式:

npx webpack ./src/main.js --mode=development

 生产模式:

npx webpack ./src/main.js --mode=production

 解析:

npx webpack: 是用来运行本地安装 Webpack 包的

./src/main.js: 指定 Webpack 从 main.js 文件开始打包,不但会打包 main.js,还会将其依赖也一起打包进来

--mode=xxx指定模式(环境)

打包成功后:默认 Webpack 会将文件打包输出到 dist 目录下,我们查看 dist 目录下文件情况就好了

 查看运行结果:在根目录下面,创建一个public目录,新建一个HTML文件,导入dist 目录下已经打包好的js文件<script src="../dist/main.js"></script>,运行查看结果

1.3.5、注意

  • 默认 Webpack 会将文件打包输出到 dist 目录下,我们查看 dist 目录下文件情况就好了
  • Webpack 本身功能比较少,只能处理 js 资源

二、Webpack的基本配置

2.1、Webpack 的5大核心概念

  1. entry(入口)

    • 指示 Webpack 从哪个文件开始打包
  1. output(输出)

    • 指示 Webpack 打包完的文件输出到哪里去,如何命名等
  1. loader(加载器)

    • webpack 本身只能处理 js、json 等资源,其他资源需要借助 loader,Webpack 才能解析

  1. plugins(插件)

    • 扩展 Webpack 的功能

  1. mode(模式)

    • 主要由两种模式:

      • 开发模式:development
      • 生产模式:production

2.2、准备Webpack 配置文件

在项目根目录下新建文件:webpack.config.js

module.exports = {
// 入口
entry: "",
// 输出
output: {},
// 加载器
module: {
rules: [],
},
// 插件
plugins: [],
// 模式
mode: "",
};

注意:Webpack 是基于 Node.js 运行的,所以采用 Common.js 模块化规范!

2.3、解析Webpack 配置文件

// Node.js的核心模块,专门用来处理文件路径
const path = require("path"); module.exports = {
// 入口
// 相对路径和绝对路径都行
entry: "./src/main.js",
// 输出
output: {
// path: 文件输出目录,必须是绝对路径
// path.resolve()方法返回一个绝对路径
// __dirname 当前文件的文件夹绝对路径
path: path.resolve(__dirname, "dist"),
// filename: 输出文件名
filename: "main.js",
},
// 加载器
module: {
rules: [],
},
// 插件
plugins: [],
// 模式
mode: "development", // 开发模式
};

运行命令:npx webpack

三、模块转换器 —— Loader

3.1、为什么需要用 Loader ?

  • 处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)
  • Loader 是对应用程序中资源文件进行转换。它们是(运行在 Node.js 中的)函数,可以将资源文件作为参数的来源,然后返回新的资源文件

  • Webpack 本身是不能识别样式资源的,所以我们需要借助 Loader 来帮助 Webpack 解析样式资源

  • Loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL;loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!

3.2、官网文档

Webpack 官方 Loader 文档:webpack 中文文档 (docschina.org)

3.3、loader 的两个属性

  1. test 属性,识别出哪些文件会被转换。

  2. use 属性,定义出在进行转换时,应该使用哪个 loader。

  3. 举栗说明:
    const path = require('path');
    
    module.exports = {
    output: {
    filename: 'my-first-webpack.bundle.js',
    },
    module: { // 可以写多个规则
    rules: [
    {
    test: /\.txt$/,
    use: 'raw-loader'
    },
    {
    test: /\.jpg$/,
    use: {
    loader: 'file-loader'
    }
    }
    ], },

3.4、loader特性

  • loader 支持链式调用。链中的每个 loader 会将转换应用在已处理过的资源上。一组链式的 loader 将按照相反的顺序执行。链中的第一个 loader 将其结果(也就是应用过转换后的资源)传递给下一个 loader,依此类推。最后,链中的最后一个 loader,返回 webpack 所期望的 JavaScript。

  • loader 可以是同步的,也可以是异步的。

  • loader 运行在 Node.js 中,并且能够执行任何操作。

  • loader 可以通过 options 对象配置(仍然支持使用 query 参数来设置选项,但是这种方式已被废弃)。

  • 除了常见的通过 package.json 的 main 来将一个 npm 模块导出为 loader,还可以在 module.rules 中使用 loader 字段直接引用一个模块。

  • 插件(plugin)可以为 loader 带来更多特性。

  • loader 能够产生额外的任意文件。

3.5、使用 loader 的三种方式

  • 配置方式(推荐):在 webpack.config.js 文件中指定 loader

    • module.rules 允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁

      module: {
      rules: [
      {
      test: /\.css$/,
      use: [
      { loader: 'style-loader' },
      {
      loader: 'css-loader',
      options: {
      modules: true
      }
      }
      ]
      }
      ]
      }
    • Loaders的配置包括以下几方面:

      test:一个用以匹配loaders所处理文件的拓展名的正则表达式(必须)

      loader:loader的名称(必须)

      include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选)

      query:为loaders提供额外的设置选项(可选)

  • 内联方式:在每个 import 语句中显式指定 loader

    • 可以在 import 语句或任何 与 "import" 方法同等的引用方式 中指定 loader。使用 ! 将资源中的 loader 分开,每个部分都会相对于当前目录解析。

      import Styles from 'style-loader!css-loader?modules!./styles.css';
    • 通过为内联 import 语句添加前缀,可以覆盖 配置 中的所有 loader, preLoader 和 postLoader:
      • 使用 ! 前缀,将禁用所有已配置的 normal loader(普通 loader)

        import Styles from '!style-loader!css-loader?modules!./styles.css';
      • 使用 !! 前缀,将禁用所有已配置的 loader(preLoader, loader, postLoader)
        import Styles from '!!style-loader!css-loader?modules!./styles.css';
      • 使用 -! 前缀,将禁用所有已配置的 preLoader 和 loader,但是不禁用 postLoaders
        import Styles from '-!style-loader!css-loader?modules!./styles.css';
    • 选项可以传递查询参数,例如 ?key=value&foo=bar,或者一个 JSON 对象,例如 ?{"key":"value","foo":"bar"}
  • CLI方式:在 shell 命令中指定它们

    webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader'

    这会对 .jade 文件使用 jade-loader,对 .css 文件使用 style-loader 和 css-loader。

3.6、

Webpack基础学习(一) (未完结)的更多相关文章

  1. Webpack基础学习

    Webpack基础学习:https://segmentfault.com/a/1190000008853009

  2. react+webpack基础学习配置

    最近学习react,公司的项目是使用create-react-app来搭建的,而我想重新使用node+mysql+react来搭建一个新的博客. 今天尝试从零开始搭建一个webpack+react项目 ...

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

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

  4. 学习webpack基础笔记01

    学习webpack基础笔记 1.webpack搭建环境最重要的就是如何使用loader和plugins,使用yarn/npm安装插件.预处理器,正确的配置好去使用 2.从0配置webpack - 1. ...

  5. webpack从0到1超详细超基础学习教程

    概念 自己是一个一听到webpack就头大,看着一堆不知道那是什么玩意的东西总觉得自己做好前端就行了,但是在使用vue-cli的时候总觉得要改其中的一些东西进行项目初始化的时候能够更好使用!所以想要根 ...

  6. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  7. C#/.NET 基础学习

    初识C# C#是微软公司发布的面向对象的.运行于.NET Framework之上的高级程序设计语言.与Java有着明显不同,借鉴Delphi的特点,与COM(组件对象模型)直接集成,是微软公司 .NE ...

  8. 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)

    前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...

  9. JavaScript 基础学习1-day14

    JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...

  10. R基础学习

    R基础学习 The Art of R Programming 1.seq 产生等差数列:seq(from,to,by) seq(from,to,length) for(i in 1:length(x) ...

随机推荐

  1. 【每日一题】15.Xorto (前缀和枚举)

    补题链接:Here 题意:选取任意不重叠的两个区间,使异或结果为 \(0\) 样例:\(1,2,3,4,5,5\) 在样例中我们可以选取 \(1,2,3\) 和 \(5,5\) 就是满足题意 思路:相 ...

  2. vue 状态管理 三、Mutations和Getters用法

    系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...

  3. vue异步组件

  4. [tslint] Identifier 'loggedIn' is never reassigned; use 'const' instead of 'let'. (prefer-const)

  5. 使用 Sealos 一键部署 Kubernetes 集群

    Sealos 是一款以 Kubernetes 为内核的云操作系统发行版,使用户能够像使用个人电脑一样简单地使用云. 与此同时,Sealos 还提供一套强大的工具,可以便利地管理整个 Kubernete ...

  6. linux route 命令

    route 管理路由表         要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是为了解决以下问题:该Linux ...

  7. The container name "/nacos" is already in use by container

    转载请注明出处: 服务器上使用docker 安装启动 nacos 的时候,报 The container name "/nacos" is already in use by co ...

  8. 如何使用ps抠图(两种扣图方法)

    PS抠图的方法有很多种,以下是其中两种常用的方法: 方法一:适用于背景颜色单一.较为简单的图片. 选中魔棒工具/魔术橡皮擦,点击背景,出现选区,点击Delete键删除. 点击快速选择工具,沿着所需图形 ...

  9. 43 干货系列从零用Rust编写负载均衡及代理,内网穿透方案完整部署

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...

  10. [转帖]关于面试时HA(RAC)会问到的一些问题

    1.什么是RAC(Real Application Cluster)? RAC(Real Application Cluster)是Oracle数据库的一种部署架构,它将多个数据库服务器连接在一起,共 ...