React项目中引用视频播出插件 easyPlayer.js 部署趟坑日志

news2024/11/16 8:49:46

目录

    • 前文
    • 记录背景
    • 问题摸排:第一天
      • 前端打包失败?
      • 远程打包逻辑与本地打包逻辑不一致?
      • 远程入口页被篡改?
      • 再次排查本地webpack打包逻辑
    • 问题摸排:第二天
      • 确认本地与远程打包一致
      • 排查远程nginx代理
      • 定位问题 index.html 的所在
      • 更改 index.html 中对依赖插件的引入
      • 资源加载失败?
      • 引入成功
    • 目标:将 public 下的 js文件夹在打包的是拷贝到 static/js/ 目录下
      • 下载 copy-webpack-plugin 插件
      • 本地修改打包逻辑
      • [copy-webpack-plugin] patterns must be an array?
      • 问题解决
    • 最后

前文

在写这篇文章之前,写过一篇名为【React 项目中如何使用 easyPlayer-pro.js】的文章,大家可能会有些好奇,为什么在这里会提到另外一篇文章。

他们是有很强的关联性的,这篇文章主要是记录解决问题的过程,而【React 项目中如何使用 easyPlayer-pro.js】这篇文章是最终的结果

因为印象深刻,所以专门为此写下一篇,算是对此次相关问题的一些概括总结。

记录背景

因为一些原因,导致原本的视频播放插件不能继续支持项目需求,所以对视频播放插件进行更换,所以 easyPlayer.js 插件就承担起了本次视频播放的主角。

刚开始在开发环境中都挺顺利,但是当打包部署的时候就出现了一些问题,为解决这些问题花费了一些时间,解决过程有些波折,也是耗费很多心思,所以就打算给记录下来,算是一件小有感触的特殊事件。

问题摸排:第一天

因为有了 【React 项目中如何使用 easyPlayer-pro.js】 这篇文章,所以有些问题我就不继续在这里啰嗦,如有需要请前往查看。

前端打包失败?

因为本地运行正常,经过查看本地打包也正常,该有引入的文件也正常引入,该有的资源也有,但是为什么就不生效了,难道是远程打包失败了?

总结:正常引入,资源存在,没问题
在这里插入图片描述

远程打包逻辑与本地打包逻辑不一致?

本地没问题,那就远程有问题了?
如下操作:

  1. 查看打包资源地址,代码分支名称

  2. 查看远程打包命令

    dir=`pwd`
    npm config set registry=https://registry.npmmirror.com/
    rm -rf [文件夹名称]
    git clone -b [分支名] [仓库地址]
    mkdir -p output/bin/static
    cd [文件夹名称]
    npm config set unsafe-perm true
    npm cache clean -f
    rm -rf node_modules
    npm install
    npm run build:test || exit 1
    rm -rf $dir/output/bin/static/*
    cp -rf build/*   $dir/output/bin/static
    cd ..
    

    因为项目的保密性,一些关键性的内容,就不展示了。

  3. 查看打包后的文件

    在这里插入图片描述

总结:经查看,仓库地址,分支名称,运行命令,打包结果都没问题。
在这里插入图片描述

远程入口页被篡改?

查看线上入口文件,是否有我引入的文件以及一些特殊标识。
在这里插入图片描述
打开后简直懵逼了有没有,打包的入口页呢?资源去哪儿呢?添加的一些特殊标识呢?
难道说不是用这个入口文件,用了其他的吗,还是说打包根据环境变量对 webpack 有特殊配置?

再次排查本地webpack打包逻辑

  1. 检查根目录下 .env 打头的多个环境变量文件
  2. 检查 webpack 输出

总结:webpack 与 环境变量没问题,并且本地与远程打包命令这些都一致
在这里插入图片描述

其实当到这里的时候,已经不知道怎么处理了,先休息一下吧,同时也因为其他工作的原因,只能先暂时搁置。

问题摸排:第二天

晚上下班回去一路上想着问题到底出在哪里,所以第二天到了工位后继续查看问题,问题一天没处理,心里就不踏实。

确认本地与远程打包一致

利用 Git 使用命令 md5sum 将远程的 index.html 文件与 本地打包的index.html 文件做对比。看看有没有不一致。

md5Sum  index.html

如下显示:

在这里插入图片描述

通过前面的值是否完全相等来判断两个文件是否一致。

总结:完全一致!
在这里插入图片描述

排查远程nginx代理

当问题走到这里的时候,我已经不怀疑我的工程代码了,我得从网络层面考虑考虑,是不是中间有第三方页面利用 nginx 做了代理跳转。

但是怎么看呢,我没有对应的权限,只能找运维的同事帮忙查看了。

当付出我心爱的零食后,总算请动了大佬,经查,代理没问题,没有指向其他的地址

总结:代理没问题。
在这里插入图片描述

定位问题 index.html 的所在

到这一步的时候,我就开始怀疑后端了,为啥要怀疑他们呢?

原因很简单,因为这个项目是前端和后端集中在一起部署的,不是单纯的前后端分开部署。

既然这样,那就拉后端同事一起看看,找了半天啥也没有找到,后端一口咬定是前端的问题,需要前端自行处理

没办法,只能自己默默继续找问题。

【陷入emo中........】

一个上午就这样溜走了,吃过午饭后下午继续。

因为上午查看这个问题导致其他项目需求没有处理,下午只能是尽快处理完手中的活儿,接着看问题。

牛马

下午在写其他项目的时候,忽然想到既然线上入口有问题,那就直接到终端里面去查看入口文件长啥样。

这一看不要紧,一看就发现了问题,这个文件居然是存在的,为什么会存在呢?

经过一番排查,能够确定这个入口文件的来源了,一切问题都不再是问题。

是啥呢?
在这里插入图片描述

原来后端使用了一个模板引擎,在项目中配置了一个 idx.ftl 的文件,这个文件经过编译后就是测试环境线上的入口文件。
他长这样:

<#assign currentTime = "${.now?long?c}">

<!doctype html>
<html lang="en">
  <head>
    <meta name="thirdHomePage" content="${thirdHomePage}">
    <meta name="AppPublic" content=".">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
    <meta charset="utf-8"/><meta name="AppPublic" content="不便展示">
    <link rel="icon" href="./favicon.ico?v=1" type="image/x-icon">
    <title>你的爱豆</title>
    <link href="./static/css/main.css?v=${currentTime}" rel="stylesheet">
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <script src="./static/js/commons.js"></script>
    <script src="./static/js/main.js?v=${currentTime}"></script>
  </body>
</html>

这一切的一切都说的通了,index.html 已定位。

更改 index.html 中对依赖插件的引入

针对引入文件丢失,标识丢失,只需要修改修改即可,如下:

<#assign currentTime = "${.now?long?c}">

<!doctype html>
<html lang="en">
  <head>
    <meta name="thirdHomePage" content="${thirdHomePage}">
    <meta name="AppPublic" content=".">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
    <meta charset="utf-8"/><meta name="AppPublic" content="不便展示">
    <link rel="icon" href="./favicon.ico?v=1" type="image/x-icon">
    <title>你的爱豆</title>
    <link href="./static/css/main.css?v=${currentTime}" rel="stylesheet">
  </head>
  <body>
  	
  	<!-- 重要 -->
    <script src="./js/easyplayer-pro.js"></script>
    
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <script src="./static/js/commons.js"></script>
    <script src="./static/js/main.js?v=${currentTime}"></script>
    
    <!-- 重要 -->
    <script>window.EasyPlayerPro = EasyPlayerPro</script>
    
  </body>
</html>

代码中标示 **【重要】**的部分就是本次需要添加的内容。

到这里基本问题不大,还是需要做进一步的验证。

资源加载失败?

本以为部署后,就没问题了,谁知道,资源居然加载不出来,不知道文件为啥不能指向 index.html 同级目录下的js文件夹下,但是可以访问 ./static/ 目录下的资源。

最终没办法继续修改为跟 <script src="./static/js/commons.js"></script> 这个引入目录一致。

<#assign currentTime = "${.now?long?c}">

<!doctype html>
<html lang="en">
  <head>
    <meta name="thirdHomePage" content="${thirdHomePage}">
    <meta name="AppPublic" content=".">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
    <meta charset="utf-8"/><meta name="AppPublic" content="不便展示">
    <link rel="icon" href="./favicon.ico?v=1" type="image/x-icon">
    <title>你的爱豆</title>
    <link href="./static/css/main.css?v=${currentTime}" rel="stylesheet">
  </head>
  <body>
  	
  	<!-- 重要:重新修改引入地址 -->
    <script src="./static/js/easyPlayerPro/easyplayer-pro.js"></script>
    
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <script src="./static/js/commons.js"></script>
    <script src="./static/js/main.js?v=${currentTime}"></script>
    
    <!-- 重要 -->
    <script>window.EasyPlayerPro = EasyPlayerPro</script>
    
  </body>
</html>

然后将对应的资源手动拷贝到 /static/js/easyPlayerPro/ 目录下,再次重新打包部署。

几分钟后

成功了
惊不惊喜,太惊喜了。

在这里插入图片描述

引入成功

经过后端同事的重新部署,发现生效了,如下:

在这里插入图片描述
在这里插入图片描述
这都说明最重要的已经解决了,到此就算是前进了一大步。

可是这里虽然成功了,但是还是有问题,不能每次打包都要手动去拷贝一次资源吧,所以只能将webpack再拿出来改吧改吧。

目标:将 public 下的 js文件夹在打包的是拷贝到 static/js/ 目录下

看到这个标题,很多的朋友脑海中自动回显一个 webpack 插件: copy-webpack-plugin,这个是专门用于拷贝文件的插件,用着也很好用,这下按照以往的思路直接上手修改就行了。

下载 copy-webpack-plugin 插件

webapck 4 地址

对于customize-cra版本为1.0.0和react版本为16.13.1的项目,copy-webpack-plugin 的版本并没有特定的要求,因为它与customize-cra和react版本不直接相关。copy-webpack-plugin是一个Webpack插件,用于复制文件和目录,它的使用并不依赖于React或customize-cra的具体版本。

截至我知识更新的时间点(2023年),你通常可以使用copy-webpack-plugin的任何版本,只要它与你使用的Webpack版本兼容。copy-webpack-plugin的最新版本应该与Webpack 4和Webpack 5都兼容,但如果你使用的是较旧的Webpack版本,你可能需要选择一个对应的copy-webpack-plugin版本。

对于Webpack 4(这可能是与react版本16.13.1一起使用的Webpack版本),copy-webpack-plugin的版本可以是5.x或更早的版本。以下是一个兼容性的例子:

npm install copy-webpack-plugin@^5.0.0 --save-dev

如果你使用的是Webpack 5,copy-webpack-plugin的版本应该是6.x或更新版本:

npm install copy-webpack-plugin@^6.0.0 --save-dev

由于你的customize-cra版本是1.0.0,这个版本是针对Webpack 4的。因此,建议安装copy-webpack-plugin的5.x版本,这样可以确保兼容性:

npm install copy-webpack-plugin@5 --save-dev

在安装了合适的copy-webpack-plugin版本之后,你就可以按照前面提供的方法在config-overrides.js中配置它了。

本地修改打包逻辑

问题得以解决,离成功又近了一步,再加上有了新思路,那心情是倍儿爽,内心有个声音告诉我:“这次一定能行”,经过一顿操作:

module.exports = {
  	webpack: override(
  		// 输出文件配置
		appBuildOutput: (config) => {
			// 其他配置...
			config.plugins.push(
				new CopyWebpackPlugin({
					patterns: [
						{
							from: 'public/js/*.js', // 指定public目录下js文件夹中的所有.js文件
							to: 'static/js/easyPlayerPro/[name].[ext]', // 指定目标路径,[name]和[ext]是文件名和扩展名的占位符
						}
					]
				})
			);
			
			return  config;
		}
	)
}

修改后再次执行 npm run build,最终结果看这个篇幅也是显而易见的,居然报错:[copy-webpack-plugin] patterns must be an array,惊不惊喜意不意外,当真是 【世事无常,大肠包小肠】。

以往的经验失效了,为啥呢?

[copy-webpack-plugin] patterns must be an array?

经过 GPT 哥的讲解:

如果你在使用 CopyWebpackPlugin 时遇到错误信息 [copy-webpack-plugin] patterns must be an array,这意味着你提供给 CopyWebpackPluginpatterns选项不是一个数组。这个选项是用来指定文件拷贝规则的,它必须是一个包含至少一个对象的数组。

下面是一个 "正确"CopyWebpackPlugin 配置示例,它指定了一个 patterns 数组:

const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
  // ...其他配置
  plugins: [
    new CopyWebpackPlugin({
      patterns: [
        {
          from: 'path/to/source/*', // 指定要复制的源文件或目录(支持glob语法)
          to: 'path/to/destination/[name][ext]', // 指定目标路径,[name]和[ext]是占位符
          // 可以添加更多配置选项,例如 noErrorOnMissing
          noErrorOnMissing: true,
        },
        // 如果需要,可以在这里添加更多的pattern对象
      ],
    }),
  ],
};

确保你的 patterns 属性是一个数组,并且每个元素都是一个对象,它描述了拷贝的规则。如果你在config-overrides.js 中使用 addWebpackPlugin 来添加 CopyWebpackPlugin,它应该看起来像下面这样:

const { override, addWebpackPlugin } = require('customize-cra');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = override(
  addWebpackPlugin(
    new CopyWebpackPlugin({
      patterns: [
        // 确保这里是一个数组,包含至少一个pattern对象
        {
          from: 'public/js/*.js',
          to: 'static/js/[name][ext]',
        },
      ],
    })
  )
);

如果 patterns 不是数组或者数组中的对象不符合预期格式,就会导致出现错误。检查你的配置,确保每个 pattern 对象都有正确的属性和格式。

这个看着跟我写的基本没多大区别,那就再找找度娘看看,得到的结论基本一致,所以能够想象得到是行不通的。

实在没办法,那就只能查看 copy-webpack-plugin 是如何传参的,所以去看看他的源码是怎么写的,以下是他的源码内容:

在这里插入图片描述

进去一眼就看到这个错误(途中画红线的位置),再接着看接收参数的地方,发现定义的类 CopyPlugin 接收两个参数:patterns 和 options,patterns是一个数组,options是一个对象

要正确地使用这个类,需要确保传递给它的 patterns参数是一个数组,而 options参数是一个对象

既然报错的根源已经找到,那就解决它,将参数给传正确。

问题解决

module.exports = {
  	webpack: override(
  		// 输出文件配置
		appBuildOutput: (config) => {
		
			// 其他配置...
			config.plugins.push(
				new CopyWebpackPlugin(
					[
						{
							from: 'public/js/*.js', // 指定public目录下js文件夹中的所有.js文件
							to: 'static/js/easyPlayerPro/[name].[ext]', // 指定目标路径,[name]和[ext]是文件名和扩展名的占位符
						}
					]
				)
			);
			
			return  config;
		}
	)
}

再次执行打包命令:npm run build,因为打包执行篇幅以及一些敏感信息,就不截全内容了,望大家理解。

在这里插入图片描述

到这里可以看到最后是成功打包,是否将 public 下的 js 文件成功的拷贝到 static/js/ 目录下,请看下面的截图:

在这里插入图片描述

到这一步,就算是前端打包工作内容部分结束了。可是就完全结束了吗,可以明确的说:还没有。还需要后端将 idx.ftl 文件中对 easyPlayer-pro.js 的引入地址再次修改一下。

经过后端同学的再次辛苦修改后,部署到测试环境,控制输入 window.EasyPlayerPro 是能够打印输出东西的,如下图所示:

在这里插入图片描述

最后

这次问题的排查,耗费了我两天半的时间,虽然中间不可能完全一心一意的将所有时间用来排查这个任务,但总体来说,时间从开始到解决确实花费了这么多,但好在是总算得以解决,心里又得一个石头总算是落下了。

写到最后,这篇文章写的有些繁杂且内容有些偏长,但总体来说,这算是我遇到这个问题进行排查的一些心路历程,希望对一些朋友有所帮助,该借助的力量一定要用起来

看到这里的朋友,耽搁您一些宝贵的时间,借助您的 黄金手指 多多 点赞,搜藏,评论

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

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

相关文章

AI10-PaddleDetection2.7安装测试

1、下载PaddleDetect-release-2.7开源项目 https://github.com/PaddlePaddle/PaddleDetection https://github.com/PaddlePaddle/PaddleDetection/releases PaddleDetection: PaddleDetection的目的是为工业界和学术界提供丰富、易用的目标检测模型 2、安装 环境要求 * Paddl…

[Qt][QWidget]详细讲解

目录 1.概述2.QWidget核心属性1.简介2.核心属性概览 3.QWidget常用属性1.enabled2.geometry1.是什么&#xff1f;2.Window Frame的影响3.相关API4.注意 3.windowTitile4.windowIcon5.windowOpacity6.cursor8.font9.toolTip10.focusPolicy11.styleSheet 1.概述 Widget是Qt中的核…

2024新版ChatGPT系统源码SparkAi系统,支持GPT4.0全模型,AI绘画,AI换脸+自定义智能体GPTs应用+AI视频+文档分析

一、文章序言 人工智能技术正迅猛发展&#xff0c;AI语言模型、AI绘画和AI视频已经在许多领域得到广泛应用。这些技术不仅在科技创新方面表现出色&#xff0c;还在艺术创作、内容生成和商业应用中展现出巨大的潜力。 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能…

【Linux】系列入门摘抄笔记-4-查看文件内容命令cat/more/less/tail

cat 查看文件内容 cat [选项] [参数] cat 命令可以用来显示文本文件的内容&#xff08;类似于 DOS 下的 type 命令&#xff09;&#xff0c;也可以把几个文件内容附加到另一个文件中&#xff0c;即连接合并文件。 tac 反向显示文件内容 tac [选项] [参数] 将文件全部内容从…

玩转Docker:Lsky pro图床+私有化部署大模型(Ollama+Openwebui)

最近搞了一个测试服务器&#xff0c;捣鼓了下一键搭建dnmp集成环境&#xff0c;然后还搭建了一个Lysk pro图床服务&#xff0c;后面又看到了开源大模型&#xff0c;也试着搭建了一下&#xff0c;中间出了一点小插曲。不过也算搭建成功了。做一个小结汇总。 1.前情回顾 DNMP:基…

探索list与iterator的区别及yield的用法

1 问题 探索list与iterator的区别探索yield的用法 2 方法 通过网上学习后了解到 List返回的类型是list&#xff0c;list只会查询一级缓存。list()中返回的List中每个对象都是原本的对象。查询的时候没遍历一个对象会产生一条sql&#xff1b;而iterator这个迭代器返回的类型是it…

Apache HTTPD 换行漏洞(CVE-2017-15715)

Vulhub - Docker-Compose file for vulnerability environment Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一…

sns.distplot()用法

seaborn.distplot(aNone, binsNone, histTrue,kdeTrue, rugFalse, fitNone, hist_kwsNone,kde_kwsNone, rug_kwsNone, fit_kwsNone,colorNone, verticalFalse, norm_histFalse,axlabelNone, labelNone, axNone, xNone)参数解释 a: 序列series、一维数组或者list&#xff0c;上…

经典街机游戏:拳皇97 for Mac(KOF97) 支持M1 中文移植版

游戏玩家一定会上手的游戏就是拳皇系列了吧&#xff0c;其中最经典的就是拳皇97&#xff0c;小编为大家提供的就是拳皇97mac版&#xff0c;熟悉的场景&#xff0c;熟悉的操作&#xff0c;原来Mac上打街机也可以这么爽&#xff0c;亲测拳皇97 for Mac 支持M1 Mac&#xff0c;喜欢…

ASP.NET Core Web API 使用Autofac框架

总目录 前言 主要介绍如何在ASP.NET Core Web API 使用Autofac框架 一、创建ASP.NET Core Web API 我们先创建一个ASP.NET Core Web API项目&#xff0c;然后准备相关的代码 1 假如我们需要实现登录的功能&#xff0c;现在我们创建相关的服务接口 public interface ILoginSe…

【vue+mathjax】mathjax的使用

方法一、引用外网的地址 但是使用这个方法&#xff0c;会报跨域&#xff0c;所以需要注意 第一步&#xff1a;在public/index.html中引入地址 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatib…

【uniapp】uniapp+vue2微信小程序实现分享功能

uniappvue2做的微信小程序实现分享功能 问题描述 uniappvue2做的微信小程序&#xff0c;发布以后点击右上角三个点&#xff0c;分享小程序的时候&#xff0c;转发和分享按钮都是灰色 解决方案 转发、分享、复制链接这几个功能需要自己来手动写方法&#xff0c;考虑到每个页…

文件上传漏洞(二,靶场搭建及漏洞利用)

前言&#xff1a; 本文基于github上的upload-labs&#xff0c;PHP study以及bp抓包软件进行操作。 一&#xff0c;靶场搭建。 靶场链接 1&#xff0c;下载zip文件到PHP study下的www文件夹内&#xff0c;并解压。 2&#xff0c;创建网站。 此处php版本应选择较老版本&…

记两次非常规文件上传Getshell

常规绕过前端和后端的任意文件上传已经没意思了&#xff0c;本文记录下之前和最近遇到的2个不太常规的任意文件上传Getshell的案例。 路径穿越文件上传Get Shell Nmap快速全端口扫描发现开放22&#xff0c;80和3306端口。访问目标&#xff0c;使用hfinger扫描发现Web应用使用…

【GD32 MCU入门教程】七、分散加载说明

分散加载说明以GD32F103ZE为例&#xff0c;分别用Keil、IAR和Embedded Builder工具实现&#xff1a;将函数放置某个地址、将常量放置某个地址、将函数放在RAM中运行的三种效果。 1、将led_toggle()函数放在0x08040000地址后。 2、将tempbuf[1024]常量放在0x08020000地址后。 …

JavaWeb中的前端工程化

本笔记基于【尚硅谷全新JavaWeb教程&#xff0c;企业主流javaweb技术栈】https://www.bilibili.com/video/BV1UN411x7xe?vd_sourcea91dafe0f846ad7bd19625e392cf76d8总结 第七章 前端工程化 一、前端工程化开篇 1.1 什么是前端工程化 前端工程化是使用软件工程的方法来单独…

借用BI系统又快又灵活地完成财务数据分析

和其他BI软件相比&#xff0c;奥威BI软件在财务分析上的表现十分突出&#xff0c;不仅能快速对接金蝶ERP&#xff0c;完成科目多变的财务指标计算分析&#xff0c;把复杂财务数据变得通俗易懂&#xff0c;还支持自助分析。从奥威BI软件的表现上看&#xff0c;说它是一款BI财务分…

[MIT6.5840]Lab3A leader election

文章目录 Part 3A: leader election大致框架详细过程数据结构初始化选举计时器选举过程心跳机制 LeaderRPC其他函数 测试结果完整代码 Part 3A: leader election 实验地址 https://pdos.csail.mit.edu/6.824/labs/lab-raft.html 论文地址 https://pdos.csail.mit.edu/6.824/pa…

【乐吾乐2D可视化组态编辑器】后端API接口文档

后端API接口文档 乐吾乐2D可视化组态编辑器demo&#xff1a;https://2d.le5le.com/ 采用前后端分离架构&#xff0c;乐吾乐后端服务提供一整套完整的web组态编辑器的所有数据接口&#xff0c;包含2D/3D图纸接口服务、文件接口服务和用户接口服务等&#xff0c;安装包版本提…

Linux 文件系统、动静态库

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a; Linux 目录 一、文件系统 1、了解磁盘的存储结构 1.基本知识 2.磁盘中盘片为什么高速旋转&#xff1f; 3.磁头为什么要左右摇摆&#xff1f; 4.如何找到一个指定位置的扇区&#xff1f; 5.文件在磁盘…