邂逅Webpack和打包过程

news2024/11/22 14:39:38

1 认识webpack工具

2 webpack基本打包

3 webpack配置文件

4 编写和打包CSS文件

5 编写和打包LESS文件

6 postcss工具处理CSS

从脚手架打包成普通的html+css+js文件

内置模块path:

拼接路径

const path = require("path")

const filepath = "C://abc/cba/nba.txt"

// 1.可以从一个路径中获取一些信息
console.log(path.extname(filepath))
console.log(path.basename(filepath))
console.log(path.dirname(filepath))


const path1 = "/abc/cba"
const path2 = "../why/kobe/james.txt"
// console.log(path1 + path2)

// 2.将多个路径拼接在一起: path.join
// console.log(path.join(path1, path2))

拼接绝对路径(用的多)

// 将多个路径拼接一起, 最终一定返回一个绝对路径: path.resolve
console.log("-------resolve---------")
console.log(path.resolve("./abc/cba", "../why/kobe", "./abc.txt"))
console.log(path.resolve("./abc/cba", "../why/kobe", "/abc.txt"))
console.log(path.resolve("./abc/cba", "./why/kobe", "./abc.txt"))
console.log(path.resolve("/abc/cba", "../why/kobe", "./abc.txt"))

console.log(path.resolve())

在单独项目里面一般都是下载局部的webpack

一般下载两样东西 webpack  webpack-cli

npm install webpack webpack-cli -D

webpack-cli是提供一个在命令提示符里面可以使用webpack命令打包项目的环境

-D的意思是只在开发时候需要,不打包到生产环境

webpack在打包src底下的utils文件时,utils文件底下必须要有index.js文件,否则在webpack命令打包项目的时候会报错 

解决办法两个:

1、改成index.js文件、

2、在webpack打包的时候指定入口文件

npx webpack --entry ./src/utils/xxx.js

那如果打包好的文件夹名称dist不是自己想要的,并且打包出来的js文件名称也是自己想要的,我们可以通过命令提示符在webpack打包时候控制,但是一个一个控制很麻烦,

npx webpack --entry ./src/utils/xxx.js --output-filename xxx.js --output-path ./xxx

于是,我们可以在项目的根目录创建一个webpack的配置文件webpack.config.js

 文件里面的内容如下,其中output里面的path必须是绝对路径。于是我们使用绝对路径拼接的方法,把当前项目的路径和你想要的文件夹名称进行拼接形成绝对路径。

当然,webpack配置文件可以不一定叫webpack.config.js,我们可以在打包的时候指定一个我们创建的名称的webpack配置文件:

npx webpack --config wk.config.js

在最后,我们打包项目一般也不是直接通过命令 npx webpack来打包文件,我们可以在项目的package.json里面的script里面配置一个build命令,命令执行npx webpack来打包项目。

然后执行

npm run build

模块化是可以在js文件直接导入css文件的。

webpack本身是可以处理js文件进行打包的,但是对于css文件或者其他后缀的文件时,就没办法打包处理了,此时打包会报错。这个时候就需要用到loader了,需要在Webpack配置文件里面配置规则rules。

具体使用loader的方法有三种:

1、内联方式

2、cli方式,webpack5就不再使用了

3、配置方式(就是在webpack的配置文件里面配置,webpack.config.js)

下载对应的loader,比如css的loader就叫css-loader ,vue的loader就叫vue-loader等等。

记得是在开发环境使用,生产环境用不上这些,所以下载的时候加 -D

npm install css-loader -D

现在有css-loader之后,webpack可以打包解析css文件了,但是打包后的页面没有css效果,因为这个时候css可以解析了,但是没有插入到页面中,这时候是还缺一个style-loader处理。,注意一点就是use里面的执行顺序是从后向前,

npm install style-loader -D
const path = require("path")

module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "./build")
  },
  module: {
    rules: [
      {
        // 告诉webpack匹配什么文件
        test: /\.css$/,
        // use: [ // use中多个loader的使用顺序是从后往前
        //   { loader: "style-loader" },
        //   { loader: "css-loader" }
        // ],
        // 简写一: 如果loader只有一个
        // loader: "css-loader"
        // 简写二: 多个loader不需要其他属性时, 可以直接写loader字符串形式
        use: [ 
          "style-loader",
          "css-loader", 
          "postcss-loader"
        
        ]
      },
     
    ]
  }
}

对less文件的处理:

下载less-loader文件

npm install less-loader -D

在rules里面写新的test,注意一点就是use里面的执行顺序是从后向前,

const path = require("path")

module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "./build")
  },
  module: {
    rules: [
      {
        // 告诉webpack匹配什么文件
        test: /\.css$/,
        // use: [ // use中多个loader的使用顺序是从后往前
        //   { loader: "style-loader" },
        //   { loader: "css-loader" }
        // ],
        // 简写一: 如果loader只有一个
        // loader: "css-loader"
        // 简写二: 多个loader不需要其他属性时, 可以直接写loader字符串形式
        use: [ 
          "style-loader",
          "css-loader", 
          "postcss-loader"
         
        ]
      },
      {
        test: /\.less$/,
        use: [ "style-loader", "css-loader", "less-loader" ]
      }
    ]
  }
}

对css的某些样式兼容性作出自动化添加前缀,我们需要下载postcss-loader:

下面这个user-select可以控制用户是否可以选中页面中的文字,不同情况可能不能用

使用的方法就是放到webpack的配置文件的rules的use里面(但是目前还是不能添加前缀):

,注意一点就是use里面的执行顺序是从后向前,

 上面的postcss-loader下载完成之后还需要下载一个autoprefixer插件

npm install autoprefixer -D

在webpack的配置文件的rules的use里面

 这个postcss还有另外一种单独文件的写法,这里涉及到以后使用自动化生成项目的时候有一个选项,询问用户是否将配置集成到package.json里面或者单独文件的存在形式。

然后就作用在use里面写postcss-loader就好了

const path = require("path")

module.exports = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "./build")
  },
  module: {
    rules: [
      {
        // 告诉webpack匹配什么文件
        test: /\.css$/,
        // use: [ // use中多个loader的使用顺序是从后往前
        //   { loader: "style-loader" },
        //   { loader: "css-loader" }
        // ],
        // 简写一: 如果loader只有一个
        // loader: "css-loader"
        // 简写二: 多个loader不需要其他属性时, 可以直接写loader字符串形式
        use: [ 
          "style-loader",
          "css-loader", 
          "postcss-loader"
          // {
          //   loader: "postcss-loader",
          //   options: {
          //     postcssOptions: {
          //       plugins: [
          //         "autoprefixer"
          //       ]
          //     }
          //   }
          // }
        ]
      },
      {
        test: /\.less$/,
        use: [ "style-loader", "css-loader", "less-loader", "postcss-loader" ]
      }
    ]
  }
}

上述的下载autoprefixer只是postcss-loader的一个插件,我们可能以后还会遇到需要使用他的其他常用插件,这时候一个一个下载就很慢,于是有了一个postcss的一个预设的插件,已经包括了很多常用的插件postcss-preset-env

npm install postcss-preset-env -D

配置postcss的文件需要改动:

1

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

Systrace系列9 —— MainThread 和 RenderThread 解读

本文是介绍 Android App 中的 MainThread 和 RenderThread,也就是大家熟悉的主线程和渲染线程。文章会从 Systrace 的角度来看 MainThread 和 RenderThread 的工作流程,以及涉及到的相关知识:卡顿、软件渲染、掉帧计算等。 这里以滑动列表为例 ,我们截取主线程和渲染线程一…

InnoDB 在可重复读 RR 隔离级别下,能解决幻读问题吗?

InnoDB 在可重复读 RR 隔离级别下,能解决幻读问题吗? MySQL 在「可重复读」隔离级别下,可以很大程度上避免幻读现象的发生(注意是很大程度避免,并不是彻底避免),所以 MySQL 并不会使用「串行化」…

Pycharm中配置不了conda解释器

我安装的是pytorch的CPU版本,在Pycharm中配置conda环境时,每次添加完都不显示,搜遍了很多方法都没用。最后成功解决,这里将一些方法进行总结,方便大家解决问题。 我的情况和解决 问题情况以及显示 1.在Pycharm的日志…

GATK最佳实践之数据预处理SnakeMake流程

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> 写的数据预处理snakemake流程其实包括在每个单独的分析中比如种系遗传变异和肿瘤变异流程中&#xff0c;这里单独拿出来做演示用&#xff0c;因为数据预处理是通用的&#xff0c;在call变异之前需要处理好数据。 数据…

Java中如何使用策略模式减少 if / else 分支的使用

目录 1、策略模式 1.1 、策略模式包含三个角色&#xff1a; 2、需求 2.1 、传统方式 2.2 、策略模式实现 2.2.1 、新建PolicyPatternController.java 2.2.2 、Express.java(实体类) 2.2.3 、定义一个接口&#xff1a;PolicyPatternService.java 2.2.4 、定义3个实现类…

Python根据经纬度在地图上显示(folium)

Python根据经纬度在地图上显示&#xff08;folium&#xff09; 一、folium介绍1.folium.Map参数简要介绍2.folium.Marker参数介绍 二、Python根据经纬度在地图上显示&#xff08;示例&#xff09;1.经纬度坐标标记2.经纬度坐标分组标记 一、folium介绍 1.folium.Map参数简要介…

URLConnection(五)

文章目录 1. 断开与服务器的连接2. 处理服务器响应3. 错误条件4. 重定向5. 代理6. 流模式 1. 断开与服务器的连接 HTTP1.1 支持持久连接&#xff0c;允许通过一个TCP socket发送多个请求和响应。不过使用Keep-Alive时&#xff0c;服务器不会因为已经向客户端发送了最后一个字节…

chatgpt赋能python:使用Python操作股票软件:探索股票市场的新方式

使用Python操作股票软件&#xff1a;探索股票市场的新方式 在当今股票市场中&#xff0c;许多投资者正在寻找新的方式来更好地管理其投资组合。一种新的方式是使用Python编程语言操作股票软件。Python拥有简洁的语法和丰富的库来帮助投资者更好地理解和管理股票。在本文中&…

挂耳式耳机哪个牌子好?这次推荐准没错!

在校园里&#xff0c;上网课、复习考证、刷视频……耳机总是我的第一选择&#xff0c;既不会打扰别人又能有效学习&#xff0c;普通的入耳式耳机戴久了总是会耳道痛&#xff0c;甚至出现耳道发炎问题&#xff0c;耳机也总是很难清洁。但是生活中我又离不开耳机&#xff0c;所以…

【源码解析】分库分表框架 Shardingsphere 源码解析

前言 以前研究过如何使用ShardingJdbc&#xff0c;使用ShardingJdbc进行分库分表&#xff0c;但是原理方面没有细致的深入了解。如果仅仅了解如何使用的话&#xff0c;对于改造和排查问题&#xff0c;其实都是不够的&#xff0c;所以跟踪源码了解其运行原理是很重要的。 Demo…

GPT学习笔记-Embedding的降维与2D,3D可视化

嵌入&#xff08;Embedding&#xff09;在机器学习和自然语言处理中是一种表示离散变量&#xff08;如单词、句子或整个文档&#xff09;的方式&#xff0c;通常是作为高维向量或者矩阵。嵌入的目标是捕捉到输入数据中的语义信息&#xff0c;使得语义相近的元素在嵌入空间中的距…

STM32+UART串口+DMA收发

目录 1、cubemax端配置 1.1 初始化配置 1.2 GPIO配置 1.3 UART配置 1.3.1 串口基础配置 1.3.2 DMA配置 2、keil端代码设计 2.1 初始化配置 2.2 DMA接收初始化配置 2.3 DMA发送配置 2.4 接收回调函数设置 2.5 回调函数内容代码编写 2.5.1 接收回调函数 2.5.2 发送回调…

最优化理论-最速下降法的推导与应用

目录 1. 引言 2. 最速下降法的基本原理 3. 最速下降法的推导过程 3.1 梯度和梯度下降 3.2 最速下降法的数学表述 4. 最速下降法的应用 4.1 无约束优化问题 4.2 约束优化问题 5. 最速下降法的优缺点 6. 结论 7.代码实现 1. 引言 在最优化理论中&#xff0c;最速下降法…

3W字吃透:微服务网关SpringCloud gateway底层原理和实操

40岁老架构师尼恩的掏心窝&#xff1a; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群中&#xff08;50&#xff09;&#xff0c;很多小伙伴凭借 “左手云原生 右手大数据 SpringCloud Alibaba 微服务“三大绝活&#xff0c;拿…

Dock的安装和使用

1、docker基础 三大组件: 仓库、镜像、容器什么是docker: 通俗来讲就是提供服务的容器Docker 两个概念:容器:可以看做空间 例如:磁盘、文件夹 镜像:灵魂 例如:系统、应用 一个镜像可以放在多个容器中(就如同把同一个文件复制到多个磁盘或文件夹一样) 一个容器可以放多个镜…

【Nginx】实战应用(服务器端集群搭建、下载站点、用户认证模块)

文章目录 Nginx实现服务器端集群搭建Nginx与Tomcat部署环境准备(Tomcat)环境准备(Nginx) Nginx实现动静分离需求分析动静分离实现步骤 Nginx实现Tomcat集群搭建 Nginx高可用解决方案KeepalivedVRRP环境搭建Keepalived配置文件介绍访问测试keepalived之vrrp_script Nginx制作下载…

python中的常见运算符

文章目录 算数运算符赋值运算关系运算符逻辑运算符非布尔值的与或非运算条件运算符(也叫三元运算符)运算符的优先级 算数运算符 加法运算符&#xff08;如果两个字符串之间进行加法运算&#xff0c;则会进行拼串操作&#xff09; - 减法运算符 * 乘法运算符&#xff08;如果将字…

小鹏汽车Q1财报:押注G6、大力降本,明年智驾BOM降半

‍作者 | 德新编辑 | 王博 小鹏汽车本周发了Q1财报&#xff0c;数据不好看&#xff0c;以致于在微博端也发了公开信。 那后续呢&#xff1f; 小鹏第二季度指引是&#xff0c;总交付数量约为2.1 - 2.2万辆&#xff0c;收入预计约为45 - 47亿元&#xff1b;四季度&#xff0c…

Selective Kernel Networks论文总结和代码实现

论文&#xff1a;https://arxiv.org/abs/1903.06586?contextcs 中文版&#xff1a;(CVPR-2019)选择性的内核网络_sk卷积 源码&#xff1a;GitHub - implus/SKNet: Code for our CVPR 2019 paper: Selective Kernel Networks 目录 一、论文出发点 二、论文主要工作 三、SK模…

洛谷——树

洛谷——树 文章目录 洛谷——树树的重心会议题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据范围 思路 树的直径【XR-3】核心城市题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOI2003] 逃学的小孩题目描述输入格式输出格式样例 #1样例…