十四、内置模块path、邂逅Webpack和打包过程、css-loader

news2024/11/29 3:48:49

一、内置模块path

(1)path介绍

(2) path常见的API

 

这里重点讲一下path.resolve()。

看上面的例子,从右往左开始解析,所以一开始解析的就是 /abc.txt  ,这个时候就会把它当成一个绝对路径了,为什么?因为看到斜杠/ 默认就把他当成根目录了。

console.log(path.resolve("./abc/cba", "./why/kobe", "/abc.txt"));

打印结果:

/abc.txt

那如果我们把 /abc.txt  前面加个点号.   会把 ./abc.txt 当成绝对路径吗?很明显不会。

console.log(path.resolve("./abc/cba", "./why/kobe", "./abc.txt"));

打印结果:看图片一眼就能看懂吧~

/Users/wangqiang/LEARN_NODE_WEBPACK_GIT/04_Path模块的使用/abc/cba/why/kobe/abc.txt

 

(3)在webpack中的使用

二、认识webpack

(1)前端发展越来越复杂

 脚手架依赖webpack:

 (2)webpack到底是什么呢?

(3)webpack官方的图片

 

(4)Vue项目加载的文件有哪些呢?

(5)webpack的使用前提

 

(6)webpack的安装

(7)webpack的默认打包

指定输入、输出的文件名:

npx webpack --entry ./src/main.js --output-filename bundle.js

 效果是不是一目了然

 

也可以指定输出的打包的路径的文件名称(之前是dist目录下,现在改成其他的):

npx webpack --output-path ./build

会在当前目录下重新生成一个build目录,咱们看下效果:

 

那如果参数很多的情况下,是不是一个一个写特别麻烦,阅读性也特别差。

所以在真实的开发里面,我们会单独创建一个配置文件。

我们看下面的第九个标题~webpack配置文件。

(8) 创建局部的webpack

(9) webpack配置文件

  • 在通常情况下,webpack需要打包的项目是非常复杂的,并且我们需要一系列的配置来满足要求,默认配置必然是不可以的。
  • 我们可以在根目录下创建一个webpack.config.js文件,来作为webpack的配置文件:

需要注意的是,path是需要一个绝对路径,否则会报错。 

配置完配置文件后,继续npx webpack,还是可以正常打包的。

# webpack.config.js
const path = require('path')

module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "./build")
  }
}

有小伙伴说如果我把webpack.config.js文件名称改成其他的可以吗?

当然可以,只不过需要在命令行再添加一个配置参数 --config

npx webpack --config wp.config.js

也可以把他放到package.json里面。 配置完之后然后命令行输入 npm run build。也就是下面说的第10小标题的内容。

(10) 指定配置文件

(11)webpack的依赖图

 

(12)css-loader、style-loader

① 案例引导

我们先来一个案例模板:这段代码的作用是创建一个元素,并设置其文本内容为"Hello World",并添加一个名为"content"的CSS类名,然后将它添加到页面中。并且设置他的css。

 

写完这个案例之后,我们通过npm run build打包的时候报错了:

这是为什么呢?我们可以把di_cpn.js文件中的css导入代码先注释掉再重新打包,发现打包成功了。

 

 

所以我们找到原因了,是因为打包css的时候出错了。那回过头来我们看下具体报的是什么错误:

ERROR in ./src/css/div_style.css 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> .content {
|   font-size: 20px;
|   color: orange;
 @ ./src/component/div_cpn.js 1:0-29
 @ ./src/index.js 2:0-28

大概意思就是:你需要一个合适的loader去处理这种文件类型, 当前没有loaders去配置处理这个文件。

② css-loader的使用

上面的错误信息告诉我们需要一个loader来加载这个css文件,但是loader是什么呢?

  • loader 可以用于对模块的源代码进行转换;
  • 我们可以将css文件也看成是一个模块,我们是通过import来加载这个模块的;
  • 在加载这个模块时,webpack其实并不知道如何对其进行加载,我们必须制定对应的loader来完成这个功能;

那么问题又来了,我们需要一个什么样的loader呢?

  • 对于加载css文件来说,我们需要一个可以读取css文件的loader;
  • 这个loader最常用的是css-loader; 

③ css-loader的安装

npm install css-loader -D

④ css-loader的使用方案以及配置代码

如何使用这个loader来加载css文件呢?有三种方式:

  1. 内联方式;
  2. CLI方式(webpack5中不再使用) 
  3. 配置方式

内联方式:

  • 内联方式使用较少,因为不方便管理;
  • 在引入的样式前加上使用的loader,并且使用!分割; 

 

CLI方式:

  • 在webpack5的文档中已经没有了--module-bind; 
  • 实际应用中也比较少使用,因为不方便管理;

 

loader配置方式

配置方式表示的意思是在我们的webpack.config.js文件中写明配置信息:

  • module.rules中允许我们配置多个loader(因为我们也会继续使用其他的loader,来完成其他文件的加载);
  • 这种方式可以更好的表示loader的配置,也方便后期的维护,同时也让你对各个Loader有一个全局的概览;

module.rules的配置如下:

  • rules属性对应的值是一个数组:[Rule]
  • 数组中存放的是一个个的Rule,Rule是一个对象,对象中可以设置多个属性:
    • test属性:用于对 resource(资源)进行匹配的,通常会设置成正则表达式;
    • use属性:对应的值时一个数组:[UseEntry]
      • UseEntry是一个对象,可以通过对象的属性来设置一些其他属性
        • loader:必须有一个 loader属性,对应的值是一个字符串;
        • options:可选的属性,值是一个字符串或者对象,值会被传入到loader中;
        • query:目前已经使用options来替代;
      • 传递字符串(如:use: [ 'style-loader' ])是 loader 属性的简写方式(如:use: [ { loader: 'style-loader'} ]);
    • loader属性: Rule.use: [ { loader } ] 的简写。
       
const path = require("path")

module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "./build"),
  },
  module: {
    rules: [
      {
        // 告诉webpack你要匹配什么类型的文件
        test: /\.css$/,
        // 用什么loader去处理
        use: [
          { loader: "css-loader" }
        ],
      },
    ],
  },
}

重新npm run build 打包的时候,发现是不是不会报错啦。

 

 

但是发现一个问题,是不是我设置的css样式没有生效。

⑤ 认识style-loader

我们已经可以通过css-loader来加载css文件了

  • 但是你会发现这个css在我们的代码中并没有生效(页面没有效果)。

这是为什么呢?

  • 因为css-loader只是负责将.css文件进行解析,并不会将解析之后的css插入到页面中;
  • 如果我们希望再完成插入style的操作,那么我们还需要另外一个loader,就是style-loader; 

安装style-loader:

npm install style-loader -D

 

⑥ 配置style-loader

那么我们应该如何使用style-loader:

  • 在配置文件中,添加style-loader;
  • 注意:因为loader的执行顺序是从右向左(或者说从下到上,或者说从后到前的),所以我们需要将style-loader写到css-loader的前面;
  • 重新执行编译npm run build,可以发现打包后的css已经生效了:
    • 当前目前我们的css是通过页内样式的方式添加进来的;
    •  后续我们也会讲如何将css抽取到单独的文件中,并且进行压缩等操作;

(13)如何处理less文件?

① 案例引导

我在cpns.js文件中选择再创建一个h2元素,

然后通过less文件编写样式,再将less文件添加到webpack的依赖图里面。 

然后我们打包的时候发现,less又跟之前打包css一样,webpack处理不了。

ERROR in ./src/css/title_style.less 1:0
Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> @fontSize: 50px;
| @fontColor: blue;
| 
 @ ./src/component/cpns.js 2:0-32
 @ ./src/index.js 2:0-25

②  如何处理less文件?

  • 在我们开发中,我们可能会使用less、sass、stylus的预处理器来编写css样式,效率会更高。
  • 那么,如何可以让我们的环境支持这些预处理器呢?
    • 首先我们需要确定,less、sass等编写的css需要通过工具转换成普通的css;
  • 比如我们编写如下的less样式:

③ less工具处理

  • 我们可以使用less工具来完成它的编辑转换;

    • npm install less -D

  • 执行如下命令:

    • npx lessc ./src/css/title.less ttle.css

       

 ④ less-loader处理

  • 但是在项目中我们会编写大量的css,它们如何可以自动转换呢?
    • 这个时候我们就可以使用less-loader,来自动使用less工具转换less到css;
    • 安装:npm install less-loader -D
  • 配置webpack.config.js
  • 执行 npm run build,less就可以自动转换成css,并且页面也会生效了。

(14)认识postcss工具

① 案例引导

我们设置user-select: none,不让用户在页面上可以选中他,这个时候我们要考虑兼容性,设置浏览器前缀,我们一个个设置是不是比较麻烦,那有没有什么办法可以自动给我们加浏览器前缀。

此时可以通过postcss工具来实现。但是如果我们想在webpack中使用这个postcss工具,那我们还得需要postcss-loader。

  • 什么是PostCSS呢?
    • PostCSS是一个通过JavaScript来转换样式的工具
    • 这个工具可以帮助我们进行一些CSS的转换和适配,比如自动添加浏览器前缀、css样式的重置;
    • 但是实现这些功能,我们需要借助于PostCSS对应的插件;
  • 如何使用PostCSS呢?主要就是两个步骤:
    • 第一步:查找PostCSS在构建工具中的扩展,比如webpack中的postcss-loader;
    • 第二步:选择可以添加你需要的PostCSS相关的插件;

② postcss-loader

  • 我们可以借助于构建工具:
    • 在webpack中使用postcss就是使用postcss-loader来处理的;
  • 安装postcss-loader:
    • npm install postcss-loader -D
  • 我们修改加载css的loader:(配置文件已经过多,给出一部分了)
    • 注意:因为postcss需要有对应的插件才会起效果,所以我们需要配置它的plugin;

 

③ 单独的postcss配置文件

当系统发现你在webpackage.config.js文件中没有配置插件时,他就会去postcss.config.js文件中找。

  • 因为我们需要添加前缀,所以要安装autoprefixer:
    • npm install autoprefixer -D
  • 我们可以将这些配置信息放到一个单独的文件中进行管理:
    • 在根目录下创建postcss.config.js

把配置信息单独放到一个文件中管理还有一个好处就是,如果我less文件是不是也需要浏览器前缀,那我们该怎么做?

我们只要在webpack.config.js配置文件中,针对less文件的配置规则中的use对应的数组中添加一下”postcss-loader“就行,因为配置信息放在单独的一个配置文件中,所以不需要每次都加一下options。

 

④ postcss-preset-env

  • 事实上,在配置postcss-loader时,我们配置插件并不需要使用autoprefixer。
  • 我们可以使用另外一个插件:postcss-preset-env
    • postcss-preset-env也是一个postcss的插件;
    • 它可以帮助我们将一些现代的CSS特性,转成大多数浏览器认识的CSS,并且会根据目标浏览器或者运行时环境添加所需的polyfill;
    • 也包括会自动帮助我们添加autoprefixer(所以相当于已经内置了autoprefixer);
  • 首先,我们需要安装postcss-preset-env:
    • npm install postcss-preset-env -D
  • 之后,我们直接修改掉之前的autoprefixer即可:

注意:我们在使用某些postcss插件时,也可以直接传入字符串 。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/987172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,数值计算——用于积分函数与方法的Stiel类的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Stiel { public class pp : UniVarRealValueFun, RealValueFun { public Stiel st { get; set; } null; public pp() { } public doubl…

探索数据库管理的利器 - PHPMyAdmin

有一个项目,后端由博主独自负责,最近需要将项目交接给另一位同事。在项目初期,博主直接在数据库中使用工具创建了相关表格,并在完成后利用PhpMyAdmin生成了一份数据字典,供团队使用。然而,在随后的开发过程…

JDK1.8下载、安装和环境配置使用

JDK1.8下载、安装和配置 下载安装包解压文件配置测试安装 下载安装包 链接地址 https://pan.baidu.com/s/1RF7-ulq0_qAelpXskDxdvA 提取码 d1y0解压文件 jdk1.8.0_181 配置 右击我的电脑,选择属性 2.点击高级系统设置 在系统变量区里点击:新建…

听书网站模板源码 懒人书院网站源码 苹果cms手机听书网站模版源码 支持手机端

苹果cms超漂亮UI高仿芒果TV听书网站模板带手机端。 手机版修改logo,ting_wap/images/logo.png 电脑版修改logo,ting_pc/img/logo.png 编辑推荐后台推荐5颗星。 新势力/热播榜单后台推荐9颗星。

3D基础:Y-Up和Z-Up

推荐:用 NSDT编辑器快速搭建可编程3D场景 所有 3D 工具都包含具有 X、Y 和 Z 轴的 3 维环境。 这些工具中的 X 轴方向相同,即使用前视图时从左到右的水平线。 但是,不同的 3D 工具可能具有不同的 Y 轴和 Z 轴方向。 有些3D工具是Y-Up的&…

西门子S7-200 SMART软件的下载安装步骤

文章目录 1、软件下载2、软件安装 1、软件下载 访问西门子官网:https://www.siemens.com/cn/zh.html,进入后在左上角产品与服务,依次进入该目录: 实在找不到在右上角放大镜直接搜索smart200 点击进入即可,然后就进入…

浅谈安科瑞ADL200仪表在爱尔兰工厂的应用

摘要:用户端消耗着整个电网80%的电能,用户端智能化用电管理对用户可靠、安全、节约用电有十分重要的意义。构建智能用电服务体系,推广用户端智能多功能仪表、智能用电管理终端等设备用电管理解决方案,实现电网与用户的双向良性互动…

第 2 章 线性表 (线性表的静态单链表存储结构(一个数组可生成若干静态链表)实现)

1. 背景说明 静态单链表实现类似于单链表,只是指针域变成了数组下标。 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE …

从策略到执行:实施战略定位的实战手册

有了完美的战略定位蓝图,但如果不知道如何执行,那一切都是徒劳。今天,我们将揭示从策略到执行的战略定位秘密路径。首先我们先明确一下战略定位的相关概念以及实施战略定位的用途。 战略定位是什么意思? 战略定位可以视为企业在市场或竞争环…

Jetpack Compose 教程

一、简介 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。 在本教程中,您将使用声明性的函数构建一个简单的界面组件。您无需修改任何 XML 布局&am…

读高性能MySQL(第4版)笔记04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看,MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

JavaScipt中如何实现函数缓存?函数缓存有哪些场景?

1、函数缓存是什么? 函数缓存就是将函数运行的结果进行缓存。本质上就是用空间(缓存存储)换时间(计算过程) 常用于缓存数据计算结果和缓存对象。 缓存只是一个临时的数据存储,它保存数据,以便将…

异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理源码解析

文章目录 概述小结好文推荐 概述 在Spring中调用线程将在调用含有Async注释的方法时立即返回,Spring是如何做到的呢?其实是其对标注Async注解的类做了代理,比如下面的类Async-AnnotationExample。 public class AsyncAnnotationExample {As…

Qt 5.15集成Crypto++ 8.8.0(MSVC 2019)笔记

一、背景 笔者已介绍过在Qt 5.15.x中使用MinGW(8.10版本)编译并集成Crypto 8.8.0。 但是该编译出来的库(.a和.dll)不适用MSVC(2019版本)构建环境,需要重新编译(.lib或和.dll&#xf…

C++11新特性② | 左值、左值引用、右值与右值引用

目录 1、引言 2、值类别及相关概念 3、左值、右值 4、左值引用、右值引用 5、移动语义 5.1、为什么需要移动语义 5.2、移动语义定义 5.3、转移构造函数 5.4、转移赋值函数 6、标准库函数 std::move 7、完美转发 std::forward VC常用功能开发汇总(专栏文章…

Mybatis 使用typeHandler自定义类型转换

之前我们介绍了使用Mybatis完成数据的增删改查操作;本篇我们介绍使用Mybatis提供的typeHandler自定义类型转换。 如果您对Mybatis的增删改查操作不太了解,可以参考: Mybatis 查询数据https://blog.csdn.net/m1729339749/article/details/13…

explain 实战-----查看hive sql执行计划

目录 1.join/left join/full join 语句会过滤关联字段 null 的值吗? (1)join (2) left join /full join 2.group by 分组语句会进行排序吗? 1.join/left join/full join 语句会过滤关联字段 null 的值吗…

Qt 5.15编译(MinGW)及集成Crypto++ 8.8.0笔记

一、背景 为使用AES加密库(AES/CBC加解密),选用Crypto 库(官网)。   最新Crypto C库依次为:8.8.0版本(2023-6-25)、8.7.0(2022-8-7)和8.6.0(202…

绘图系统三:支持散点图、极坐标和子图绘制

文章目录 新增散点图绘制绑定与回调极坐标功能子图绘制功能源代码 📈一 三维绘图系统📈二 多图绘制系统 新增散点图绘制 同一坐标系中绘制多个图像是很常见的需求,比如数据拟合的时候,用散点图表示原始数据,用曲线图…

vue3 webpack打包流程及安装 (1)

npm run build 也可以打包 如果没有特殊需求 可以使用 效果其实是差不多的 --------------------------------------------------------------------------------------------------------------------------------- webpack网址 : 起步 | webpack 中文文档 (docsc…