构建工具——webpack、vite

文章目录

  • 构建工具
    • Webpack
      • 使用步骤
      • 配置文件(webpack.config.js)
      • 插件(plugin)
    • Vite
      • Vite 也是前端的构建工具
      • 使用命令构建
      • 配置文件:`vite.config.js`

构建工具

  • 当我们习惯了在 node 中编写代码的方式后,在回到前端编写 html、css、js 这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。
  • 我们就迫切的希望有一款工具可以对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,又解决了模块过多的问题。
  • 构建工具就起到这样一个作用,通过构建工具可以将使用 ESM 规范编写的代码转换为旧的 JS 语法,这样可以使得所有的浏览器都可以支持代码。

Webpack

https://www.webpackjs.com/

使用步骤

1. 初始化项目`yarn init -y`
2. 安装依赖`webpack`、`webpack-cli`
	- `yarn add -D webpack webpack-cli`
	- -D代表开发依赖
	![在这里插入图片描述](https://img-blog.csdnimg.cn/b9e1a52ce47d4b5eb6c71747368d5b8e.png)
	- 自定义命令:
	- ```
	    "scripts": {
        "build": "webpack"
	    },
		```
3. 在项目中创建`src`目录,然后编写代码(index.js)
4. 执行`yarn webpack`来对代码进行打包(打包后观察 dist 目录)
  • 注意:书写代码的时候,要知道代码是用node管理的,既要清楚代码是在前端运行还是在node运行的。前端的模块化规范和node的模块化规范是不一样的,所以要区分开来。
    在这里插入图片描述

  • src里面的遵循前端规范,外面的遵循node规范。

  • 前端的:
    在这里插入图片描述

  • node的:
    在这里插入图片描述

  • import m1 from "./m2"是导入,相对路径,且在webpack中文件名不用写全(后缀名),因为会自动补全。

配置文件(webpack.config.js)

 const path = require("path")
 module.exports = {
     mode: "production",
     entry: "./src/index.js",
     output: {},
     module: {
         rules: [
             {
                 test: /\.css$/i,
                 use: ["style-loader", "css-loader"]
             }
         ]
     }
 }
  • entry:用来指定打包时的主文件 默认 ./src/index.js
    entry: "./hello/hello.js", // 用来指定打包时的主文件 默认 ./src/index.js
    entry: ["./src/a.js", "./src/b.js"],
    entry: {
         a: "./src/a.js",
        b: "./src/b.js"
    },
    entry: "./src/a.js",
  • output
	const path = require("path")
    output: {
        path: path.resolve(__dirname, "dist"), // 指定打包的目录,必须要绝对路径
        filename: "main.js", // 打包后的文件名
        filename:"[name]-[id]-[hash].js",
        clean: true // 自动清理打包目录(每次打包之前自动清理path)
    }, // 配置代码打包后的地址
  • path.resolve(__dirname, "dist") 是 Node.js 中的路径解析方法,用于获取相对于当前脚本文件的绝对路径。具体来说,__dirname 是一个 Node.js中的全局变量,它表示当前脚本所在的目录的绝对路径。而 path.resolve()path模块提供的方法之一,用于将相对路径解析为绝对路径。它接受多个参数,并根据这些参数返回一个标准化的绝对路径字符串。在你给出的示例中,__dirname变量用于表示当前脚本所在的目录的路径。通过调用 path.resolve(__dirname, "dist"),我们将相对路径"dist" 解析为相对于当前脚本的绝对路径。假设当前脚本文件位于 /home/user/myproject/src/main.js,则调用 path.resolve(__dirname,"dist") 将返回 /home/user/myproject/src/dist,即相对于当前脚本的绝对路径。这个方法常用于获取与当前脚本文件相关的路径,例如在构建工具或服务器端应用程序中指定输出文件的路径等。
  • filename: "[name]-[id]-[hash].js" 是一个常见的模板字符串,在构建工具(例如Webpack)的配置中用于指定输出文件的名称。
    这个模板字符串中包含了几个占位符:
    - [name]:代表模块(entry)的名称。
    - [id]:代表模块的唯一标识符。
    - [hash]:代表生成的哈希值,用于保证文件的唯一性。
    当构建工具处理多个入口模块时,它将为每个模块生成对应的输出文件,并且会根据模板字符串中的占位符替换来确定每个输出文件的名称。
    例如,假设有两个入口模块:appvendors。使用 [name] 占位符会将输出文件的名称分别设置为 appvendors。如果使用 [id] 占位符,构建工具将会使用模块的标识符来替换,这通常是一个数字值。而 [hash] 占位符会根据文件内容生成一个唯一的哈希值,用于文件缓存和版本管理。
    因此,对于模板字符串 "[name]-[id]-[hash].js",构建工具会根据实际的模块名称、标识符和哈希值来生成输出文件的名称。结果可能是类似于 app-0-abc123.js 或者 vendors-1-def456.js 的文件名。
    请注意,模板字符串的具体语法和支持的占位符可能因使用的构建工具而有所不同,上述示例只是一种常见的用法。在具体的构建工具配置中,你需要查看相关文档以了解支持的模板字符串语法和占位符的含义。
  • loaders
  webpack默认情况下,只会处理js文件,如果我们希望它可以处理其他类型的文件,则要为其引入loader

    - 以css为例:
        - 使用css-loader可以处理js中的样式,仅仅负责打包(yarn add -D css-loader)
        - 使用style-loader可以处理展示js中的样式,(yarn add -D style-loader)
        - 使用步骤:
            1.安装:yarn add css-loader -D
            2.配置:
                module: {
                    rules: [
                        {
                            test: /\.css$/i,
                            use: "css-loader"
                        }
                    ]
                }
*/
    module: {
        rules: [
            {
                test: /\.css$/i,
                //有顺序要求,从后往前执行
                use: ["style-loader", "css-loader"]
            },
            {
                test:/\.(jpg|png|gif)$/i,
                type:"asset/resource" // 图片直接资源类型的数据,可以通过指定type来处理
            }
        ]
    }
  • 在编写 js 代码时,经常需要使用一些 js 中的新特性,而新特性在旧的浏览器中兼容性并不好。此时就导致我们无法使用一些新的特性。

  • 但是我们现在希望能够使用新的特性,我们可以采用折中的方案。依然使用新特性编写代码,但是代码编写完成时我们可以通过一些工具将新代码转换为旧代码。

  • babel 就是这样一个工具,可以将新的 js 语法转换为旧的 js,以提高代码的兼容性。

  • 我们如果希望在 webpack 支持 babel,则需要向 webpack 中引入 babel 的 loader

  • 使用步骤

    1. 安装 npm install -D babel-loader @babel/core @babel/preset-env

    2. 配置:

      module: {
          rules: [
              {
                  test: /\.m?js$/,
                  exclude: /(node_modules|bower_components)/,
                  use: {
                      loader: "babel-loader",
                      options: {
                          presets: ["@babel/preset-env"]
                      }
                  }
              }
          ]
      }
      
    3. 在 package.json 中设置兼容列表

      "browserslist": [
              "defaults"
       ]
      

https://github.com/browserslist/browserslist

插件(plugin)

-   插件用来为 webpack 来扩展功能

-   html-webpack-plugin(yarn add -D html-webpack-plugin)

    -   这个插件可以在打包代码后,自动在打包目录生成 html 页面

    -   使用步骤:

        1. 安装依赖
        2. 配置插件
         
         // 引入html插件
 		const HTMLPlugin = require("html-webpack-plugin")
 		
         plugins: [
             new HTMLPlugin({
                 // title: "Hello Webpack",
                 template: "./src/index.html" // 以此为一个模板
             })
         ]
  • 注意:怎么判断是loaders还是plugin,loaders会对代码进行编译,即会将代码的状态从一个状态变成另一个状态;插件就是完成一个辅助功能。

  • yarn webpack --watch是对代码进行编译,即是当代码发生变化的时候,就会自动对代码进行构建。

  • 开发服务器(webpack-dev-server)

    • 安装:
      • yarn add -D webpack-dev-server
      • 启动:yarn webpack serve --open
  • 简化启动命令

      "scripts": {
       	 "build": "webpack",
      	  "watch": "webpack --watch",
       	 "dev": "webpack serve --open"
      },
      // 用yarn dev启动,并不会生成dist文件。
      // 这是由于该命令将文件部署到服务器上了,所以说用该命令测试完后,执行yarn build进行打包。
    
  • devtool:"inline-source-map"配置源码的映射(方便调试)
    在这里插入图片描述

Vite

https://cn.vitejs.dev/

Vite 也是前端的构建工具

  • 相较于 webpack,vite 采用了不同的运行方式:

    • 开发时,并不对代码打包,而是直接采用 ESM 的方式来运行项目
    • 在项目部署时,在对项目进行打包
  • 除了速度外,vite 使用起来也更加方便

  • 基本使用:

    1. 安装开发依赖 vite

    2. vite 的源码目录就是项目根目录

    3. 开发命令:

      yarn vite 启动开发服务器 —>yarn dev

      yarn vite build 打包代码 —>yarn build

      yarn vite preview 预览打包后代码 —>yarn preview
      在这里插入图片描述

  • 注意

    • vite在开发的时候用的是ES的模块运行的,打包的时候也是用ES的模块进行项目打包的。对于通过用ES模块打包后的项目只能通过URL进行访问。
    • 使用vite打包完之后的项目,可以说运行方式只有两种:
      • 部署到服务器
      • yarn vite preview

使用命令构建

npm create vite@latest
yarn create vite
pnpm create vite

配置文件:vite.config.js

  • npm add -D @vitejs/plugin-legacy

  • yarn add -D terser

  • 格式:

    import { defineConfig } from "vite"
    import legacy from "@vitejs/plugin-legacy"
    
    // 用defineConfig包起来 是为了有提示
    export default defineConfig({
        plugins: [
            legacy({
                targets: ["defaults"]
            })
        ]
    })
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python怎么获取免费代理IP

什么是免费代理IP 免费代理IP是指可以免费使用的代理服务器的IP地址。代理服务器充当客户端和目标服务器之间的中间人,通过转发请求和响应来实现网络数据的传输。使用代理IP可以隐藏真实的客户端IP地址,实现匿名访问网络资源。 免费代理IP通常由个人或组…

实战:k8s证书续签-2023.6.19(测试成功)

实战:k8s证书续签-2023.6.19(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 1、前言 k8s集群核心的证书有2套,还有1套非核心的(即使出问题也问题不大)。 ⚠️ 如果是kubeadm搭建的k8s集群,其有效期为…

Spring系列4 -- Bean的作用域和生命周期

目录 1. 案例 2. 作用域定义 2.1 Bean的6种作用域 2.2 设置作用域 3. Sring的执行流程 4. Bean的生命周期 思考: 为什么不是先进行初始化然后再进行设置属性呢? 1. 案例 假设现在有⼀个公共的 Bean,提供给 A ⽤户和 B ⽤户使⽤,然⽽在使⽤的途中…

HTML5中一些酷炫又有趣的新特性代码整理汇总

HTML5中一些酷炫又有趣的新特性代码整理汇总 文章目录 HTML5中一些酷炫又有趣的新特性代码整理汇总前言一、详情标签< details>二、内容可编辑三、标记内容< mark>四、data-* 属性五、输出标签六、数据列表< datalist>七、Meter八、Inputs 前言 HTML5 是 Hy…

Apikit 自学日记:测试数据集

测试数据集 添加数据集的变量 在测试用例详情页面中&#xff0c;您可以点击上方的 测试数据 标签&#xff0c;进入用例的数据管理页面。在这里您可以添加多组测试数据&#xff0c;以及每组测试数据的变量。 在添加数据集前&#xff0c;我们需要设置数据集中存在什么变量。可以…

IPV6使用越来越广,您会配置吗?

前面针对IPv6写过一篇文章&#xff0c;但是好多网友反映没有读懂&#xff0c;今天再给大家把内容浓缩一下&#xff0c;教给大家如何配置。 IPV6的推出主要是为了解决地址空间的不足&#xff0c;从而进一步的促进互联网的发展。IPV6地址空间大到惊人&#xff0c;有人比喻地球上…

Springboot设置并访问静态资源目录

目录​​​​​​​ 静态文件 application设置方法 配置详解 编写配置 优缺点 设置配置类方法 配置详解 编写配置 优缺点 总结 静态文件 静态资源&#xff0c;一般是网页端的&#xff1a;HTML文件、JavaScript文件和图片。尤其是设置图片的静态资源&#xff0c;尤其重…

BERT论文解读及实现(一)

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 1 论文解读 1.1 模型概览 There are two steps in our framework: pre-training and fine-tuning. bert由预训练模型微调模型组成。 ① pre-training, the model is trained on unlabele…

基于simulink处理监控视频以选择包含运动的帧(附源码)

一、前言 此示例演示如何处理监控视频以选择包含运动的帧。安全问题要求使用摄像机对重要位置进行持续监控。为了有效地记录、查看和存档这些海量数据&#xff0c;您可以减小视频帧大小或减少录制的视频帧总数。此示例说明了后一种方法。在其中&#xff0c;相机视野中的运动会…

使用GitHub Actions 来进行项目远程服务器部署

由于项目源码是托管在github的&#xff0c;而部署是放在远程服务器上&#xff0c;并且使用nginx部署。 现在的部署流程时&#xff0c;需要更新时&#xff0c;在本地切换到master分支&#xff0c;执行构建操作&#xff0c;拿到构建出的dist目录&#xff0c;将其上传到远程服务的…

【HTTP】HTTP协议 HTTPS 协议

目录 一、HTTP &#x1f337;1、HTTP是什么&#xff1f; &#x1f337;2、HTTP的工作过程 &#x1f337;3、 抓包工具Fiddler的使用 &#x1f337;4、HTTP的协议格式&#xff08;重点&#xff09; &#x1f337;5、HTTP请求 5.1 请求地址URL 5.2 方法method 5.3 认识 …

常见面试题之垃圾收回

1. 简述Java垃圾回收机制&#xff1f;&#xff08;GC是什么&#xff1f;为什么要GC&#xff1f;&#xff09; 为了让程序员更专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以&#xff0c;在Java语言中&#xff0c;有了自动的垃圾回收机制&#x…

权限管理系统后端实现1-SpringSecurity执行原理概述

spring security的简单原理&#xff1a; SpringSecurity有很多很多的拦截器&#xff0c;在执行流程里面主要有两个核心的拦截器 1&#xff0c;登陆验证拦截器AuthenticationProcessingFilter 2&#xff0c;资源管理拦截器AbstractSecurityInterceptor 但拦截器里面的实现需要…

Android Studio实现内容丰富的安卓公交线路查询平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号084 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 开发语言&#xff1a;java 2.功能介绍 安卓端&#xff1a; …

前端:运用html+css+js实现虎牙直播上的轮播图效果

前端:运用htmlcssjs实现虎牙直播上的轮播图效果 1. 我的实现效果2. 前端界面设置3. 图片动画效果实现4. 总的代码 1. 我的实现效果 近段时间看虎牙直播看的多&#xff0c;发现这上面的一个轮播图效果不错&#xff0c;如是打算运用纯htmlcssjs实现一下上述那个运行效果&#xff…

spring boot项目如何自定义参数校验规则

spring boot项目对参数进行校验时&#xff0c;比如非空校验&#xff0c;可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验&#xff0c;自带的校验规则无法满足要求&#xff0c;此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样&…

LangChain大型语言模型(LLM)应用开发(三):Chains

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

IP 协议(网络层协议)

IP协议 IP 协议作用地址管理动态分配 IP 地址NAT 机制IPv6IP 地址的组成 路由选择 IP 协议作用 主要有两点 : 地址管理 为每个上网的设备分配一个唯一地址. 路由选择 两台主机间的信息交互, 具体走哪条线路. 地址管理 先来看看 IP协议 报文格式 : IP 协议最主要就是 32 位的…

香橙派4和树莓派4B构建K8S集群实践之七: Jenkins

目录 1. 说明 2. 步骤 2.1 准备工作 2.2 安装 2.2.1 用jenkins原站for k8s的安装仓方法安装 2.2.2 Helm 安装 3. 相关命令 4. 遇到的问题 5. 参考 1. 说明 在k8s上部署jenkins&#xff0c;并用 jenkins.k8s-t2.com访问在namespace为devops下安装在指定节点k8s-master-…

任天堂 Switch 六月销量破纪录,极有可能成为日本市场销量冠军

任天堂于2017年发布的游戏机Switch已进入第六个年头。虽然该游戏机在硬件性能和品控方面受到一些评价不佳&#xff0c;但销售数据表明绝大多数玩家仍然乐意购买Switch游戏机。 根据日本经济新闻报道&#xff0c;今年6月Switch在日本销售了380,000台机器&#xff0c;同比增长68%…