一、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. SpringBoot多模块项目搭建以及搭建基础模板

    多模块项目搭建 目录 多模块项目搭建 1.父项目pom文件编辑 2.创建子模块 1.父项目pom文件编辑 <!--1.父工程 添加pom格式--> <packaging>pom ...

  2. springboot项目统一封装返回值和异常处理(方式一)

    为什么要统一返回值: 在我们做后端应用的时候,前后端分离的情况下,我们经常会定义一个数据格式,通常会包含code,message,data这三个必不可少的信息来方便我们的交流,下面我们直接来看代码pa ...

  3. 如何用 Serverless 一键部署 Stable Diffusion?

    思路 其实很简单, 我们只需要将镜像里面的动态路径映射到 NAS文件存储里面即可,利用 NAS 独立存储文件模型,扩展,语言包等,并且我们可以为管理 NAS 单独配置一个可视化的后台,用简单的文件上传 ...

  4. 深度 | 新兴软件研发范式崛起,云计算全面走向 Serverless 化

    11月3日,2022 杭州 · 云栖大会上,阿里云智能总裁张建锋表示,以云为核心的新型计算体系正在形成,软件研发范式正在发生新的变革,Serverless 是其中最重要的趋势之一,阿里云将坚定推进核心 ...

  5. scrollIntoView页面滑动特效

    点击左侧的菜单,页面平滑滚动:

  6. COM组件开发-关于在开发环境下COM组件的(来自 HRESULT 的异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE)) 以及 在CLR语言下可能报错 未能加载文件或程序集“Interop.xxx 的问题

    1.关于在开发环境下COM组件的(来自 HRESULT 的异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE)) 开发环境下,COM组件注册的文件 不一定是你自己现在程序调 ...

  7. python之排序的几种方法

    一.通过sort()可以快速实现数组的排序: 1 a=[2,3,1] 2 a.sort() 3 print(a) 打印返回结果: 二.如果不知道有sort()函数或者一些特殊场景需要排序时,如果解决呢 ...

  8. springboot启动流程 (1) 流程概览

    本文将通过阅读源码方式分析SpringBoot应用的启动流程,不涉及Spring启动部分(有相应的文章介绍). 本文不会对各个流程做展开分析,后续会有文章介绍详细流程. SpringApplicati ...

  9. 【Linux】字符驱动之sysfs接口实现

    [来源]https://blog.csdn.net/qq_20553613/article/details/104556269

  10. [转帖](1.3)sql server for linux 配置mssql-conf(即SSCM)

    https://blog.51cto.com/ultrasql/2152021 目录 [配置mssql-conf] 启用SQL Server代理 修改SQL Server排序规则 配置客户反馈 修改默 ...