当前位置: 首页 > news >正文

旅游精品网站建设/整站排名优化公司

旅游精品网站建设,整站排名优化公司,pc28预测网站多少做,哪里设计公司vi目录 ResolveMode配置搭本地服务器区分环境配置 Resolve 前面学习时使用了各种各样的模块依赖,这些模块可能来自于自己编写的代码,也可能来自第三方库,在 Webpack 中,resolve 是用于解析模块依赖的配置项,它决定了 We…

目录

  • Resolve
  • Mode配置
  • 搭本地服务器
  • 区分环境配置

Resolve

前面学习时使用了各种各样的模块依赖,这些模块可能来自于自己编写的代码,也可能来自第三方库,Webpack 中,resolve 是用于解析模块依赖的配置项,它决定了 Webpack 如何找到项目中的模块文件

  • resolve 作用:

    • 当你在代码中 importrequire 一个模块时、resolve 配置可以帮助 Webpack 定义如何解析这些模块路径,特别是在处理文件扩展名、路径别名、模块目录等方面

    • webpack 使用 enhanced-resolve 来解析文件路径

  • 解析三种文件路径:

    • 绝对路径:这种情况下,不需要再做进一步解析

    • 相对路径

      在这种情况下,使用 importrequire 的资源文件所处的目录,被认为是上下文目录

      import/require 中给定的相对路径,会拼接此上下文路径,来生成模块的绝对路径

    • 模块路径

      resolve.modules 中指定的所有目录检索模块,默认值目录是 ['node_modules'],所以默认会从node_modules中查找文件

      可以通过设置别名的方式来替换初始模块路径

  • 解析引入文件和文件夹

    • 引入文件:

      如果文件具有扩展名,则直接打包文件

      否则,将使用 resolve.extensions 选项作为文件扩展名解析

    • 引入文件夹:

      在文件夹中根据 resolve.mainFiles 配置选项中指定的文件顺序查找

      resolve.mainFiles的默认值是 ['index']

      再根据 resolve.extensions 来解析扩展名

  • resolve 常用属性:
    在这里插入图片描述

    • extensions

      解析到文件时自动添加扩展名,告诉 Webpack 在导入语句中省略文件扩展名时,它应该查找哪些扩展名

      默认值是 ['.wasm', '.mjs', '.js', '.json']

      如果代码中想添加加载 .vue 或者 jsx 或者 ts 等文件时,必须自己写上扩展名

    • alias用于定义路径别名,可以通过别名缩短路径,可以使用 @ 代替长路径

    • modules用于指定模块查找的目录,默认情况下 Webpack 只会查找 node_modules 文件夹,通过 modules 选项,可以为 Webpack 指定其他的查找目录

    • mainFields:告诉 Webpack 在解析模块的 package.json 时优先使用哪些字段,通常用于库的 package.json 中,常见的字段有 main, modulebrowser

    • mainFiles指定文件查找时的入口文件名,默认是 index

    • symlinks:控制 Webpack 是否遵循符号链接(symlink),默认为 true

Mode配置

前面我们学习webpack打包相关文件时,有个警告我们一直没有看,这就是需要配置mode,接下来学习mode
在这里插入图片描述
Webpack 中,mode 是一个重要的配置项,用于设置构建模式。它影响 Webpack 的行为和输出,决定了构建时是否开启优化(如压缩代码、调试工具等)

mode 有三个值:
在这里插入图片描述

  • development(开发模式):用于开发环境,提供调试支持和快速构建
    在这里插入图片描述

    • 特点:

      开启调试功能

      输出的代码不会被压缩,以便于调试

      启用 eval 作为 devtool,生成代码映射(source maps),方便调试源码

      开启了增量编译,构建速度较快

    • 内置优化:

      devtool: 'eval' (快速生成 source maps)

      启用更有利于调试的错误提示

  • production(生产模式):用于生产环境,进行代码压缩和各种优化,生成小体积的高效代码
    在这里插入图片描述

    • 特点:

      启用各种优化功能,以减少输出的文件体积和提高性能

      代码会被压缩(通过 TerserPlugin

      自动去除未引用的代码(Tree Shaking

      生成优化的 source maps(可选,通常关闭)

    • 内置优化:
      TerserPlugin(用于压缩 JavaScript 代码)

      mode: 'production' 会自动将 devtool 设为 false,取消 source map 以减少文件体积

      通过 Tree Shaking 去除未引用代码

      通过 DefinePluginprocess.env.NODE_ENV 设置为 "production"

  • none(无模式):禁用所有内置的优化,用于完全自定义配置的场景
    在这里插入图片描述

    • 特点:

      禁用所有默认优化

      适用于自定义优化的场景

更多的mode配置:
在这里插入图片描述

搭本地服务器

目前开发的代码,为了运行需要有两个操作:npm run build编译相关的代码,通过live server或者直接通过浏览器,打开index.html代码查看效果。这个操作会影响开发效率,希望做到当文件发生变化时,可以自动的完成编译和展示

为了完成自动编译,webpack提供了几种可选的方式:

  • webpack watch mode

  • webpack-dev-server(常用)

  • webpack-dev-middleware

Webpack 中搭建本地服务器通常通过使用 webpack-dev-server 来实现。webpack-dev-server 是一个方便的开发工具,它为你提供一个轻量级的 HTTP 服务器,并能实时监控文件的变化,自动重新加载页面

  • npm install webpack-dev-server -D:安装

  • 修改配置文件,启动时加上serve参数在这里插入图片描述

  • webpack-dev-server 在编译之后不会写入到任何输出文件,而是将打包文件保留在内存中

  • 事实上webpack-dev-server使用了一个库叫memfsmemory-fs webpack自己写的)

  • 都配置完可以执行npm run serve,但如果你前面配置loaderplugins都是看我前面的文章练习的,这时会打包成功,但是访问http://localhost:8080/是空白的
    在这里插入图片描述

配置选项说明:

  • devServer:打包后不会生成打包文件
    • static.directory:本地服务器所提供服务的文件目录

    • compress:是否是否为静态文件启用 gzip 压缩,默认false,提高页面的加载性能
      在这里插入图片描述

    • host:设置主机地址,默认值是localhost,如果希望其他地方也可以访问,可以设置为 0.0.0.0

      localhost0.0.0.0 的区别:

      1. localhost 本质上是一个域名,通常情况下会被解析成127.0.0.1

      2. 127.0.0.1 回环地址(Loop Back Address),表达的意思其实是我们主机自己发出去的包,直接被自己接收

      3. 正常的数据库包经过 应用层 - 传输层 - 网络层 - 数据链路层 - 物理层,而回环地址是在网络层直接就被获取到了,是不会经过数据链路层和物理层的

      4. 比如我们监听 127.0.0.1 时,在同一个网段下的主机中,通过ip地址是不能访问的

      5. 0.0.0.0 监听IPV4上所有的地址,再根据端口找到不同的应用程序,比如我们监听 0.0.0.0时,在同一个网段下的主机中,通过ip地址是可以访问的

    • port:指定服务器监听的端口号(例如 9000),不指定默认为 8080

    • open:启动服务器时自动打开浏览器,自动导航到 localhost:port

    • openPage:自动打开配置的页面

    • hot:开启模块热替换(HMR),默认已经开启,实现页面的局部更新而不重新加载整个页面,开启后浏览器中可以看到如下效果,修改入口文件还是会全局刷新的
      在这里插入图片描述

      HMR的全称是Hot Module Replacement,翻译为模块热替换,它是指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个页面

      HMR通过如下几种方式,来提高开发的速度:

      1. 不重新加载整个页面,这样可以保留某些应用程序的状态不丢失

      2. 只更新需要变化的内容,节省开发的时间

      3. 修改了css、js源代码,会立即在浏览器更新,相当于直接在浏览器的devtools中直接修改样式

      如果发现当修改了某一个模块的代码时,依然是刷新的整个页面,这是因为需要去指定哪些模块发生更新时进行HMR,在实际项目中我们不需要自己设置的

      vue开发中,使用vue-loader,此loader支持vue组件的HMR,提供开箱即用的体验

      react开发中,有React Hot Loader,实时调整react组件(目前React官方已经弃用了,改成使用react-refresh
      在这里插入图片描述

    • historyApiFallback:如果启用了 HTML5History API(用于单页应用),需要该配置项来重定向所有 404 到首页。否则,在子页面刷新时可能找不到对应资源

配置整体代码参考:

const path = require("path");
const { VueLoaderPlugin } = require("vue-loader/dist/index");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { DefinePlugin } = require("webpack");module.exports = {mode: "development",entry: "./src/index.js",output: {clean: true,filename: "index.js",path: path.resolve(__dirname, "build"),}, resolve: {alias: {'@components': path.resolve(__dirname, 'src/components'),'@utils': path.resolve(__dirname, 'src/utils'),},extensions: ['.js', '.vue', '.json'],},devServer: {static: {directory: path.resolve(__dirname, 'build'), // 服务器内容的目录},compress: true, // 启用 gzip 压缩port: 9000, // 指定服务器端口号open: true, // 自动打开浏览器open: ['main.html'], // 自动打开浏览器并定向到http://localhost:9000/main.htmlhot: true, // 热更新historyApiFallback: true, // 支持HTML5的历史API(单页应用中很有用)},plugins: [new VueLoaderPlugin(),new CleanWebpackPlugin(),new HtmlWebpackPlugin({title: "haahha",template: "./public/index.html",filename: "main.html",minify: {collapseWhitespace: true, // 移除空白removeComments: true, // 移除注释removeAttributeQuotes: true, // 移除属性的引号},}),new DefinePlugin({BASE_URL: '"./"',}),],module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader", "postcss-loader"],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: "asset",generator: {filename: "image/[name].[hash:8][ext]",},parser: {dataUrlCondition: {maxSize: 100 * 1024, // 这时使用的图片没有超过这个值他就不会被打包成文件,而是转base64使用},},},{test: /\.m?js$/,use: [{loader: "babel-loader",options: {presets: ["@babel/preset-env"],},},],},{test: /\.vue$/,loader: "vue-loader",},],},
};

区分环境配置

  • 目前我们所有的webpack配置信息都是放到一个配置文件中的:XXXX.config.js

  • 但某些配置是在开发环境需要使用的,某些配置是在生成环境需要使用的,当然某些配置是在开发和生成环境都会使用的

  • 当配置越来越多时这个文件会变得越来越不容易维护,最好对配置进行划分,方便我们维护和管理

如何区分不同的配置:

  • 建立config文件夹编写开发和生产配置文件

  • 抽取公共的配置,并与开发和生产配置合并

  • 添加不同的打包脚本
    在这里插入图片描述

// wk.comm.config.js
const path = require("path");
const { VueLoaderPlugin } = require("vue-loader/dist/index");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { DefinePlugin } = require("webpack");module.exports = {entry: "./src/index.js",output: {filename: "index.js",path: path.resolve(__dirname, "build"),}, resolve: {alias: {'@components': path.resolve(__dirname, 'src/components'),'@utils': path.resolve(__dirname, 'src/utils'),},extensions: ['.js', '.vue', '.json'],},plugins: [new VueLoaderPlugin(),new HtmlWebpackPlugin({title: "haahha",template: "./public/index.html",filename: "main.html",minify: {collapseWhitespace: true, // 移除空白removeComments: true, // 移除注释removeAttributeQuotes: true, // 移除属性的引号},}),new DefinePlugin({BASE_URL: '"./"',}),],module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader", "postcss-loader"],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: "asset",generator: {filename: "image/[name].[hash:8][ext]",},parser: {dataUrlCondition: {maxSize: 100 * 1024, // 这时使用的图片没有超过这个值他就不会被打包成文件,而是转base64使用},},},{test: /\.m?js$/,use: [{loader: "babel-loader",options: {presets: ["@babel/preset-env"],},},],},{test: /\.vue$/,loader: "vue-loader",},],},
};// wk.dev.config.js
const path = require("path");
const { merge } = require('webpack-merge')
const commonConfig = require('./wk.comm.config')module.exports = merge(commonConfig, {mode: "development",devServer: {static: {directory: path.resolve(__dirname, 'build'), // 服务器内容的目录},compress: true, // 启用 gzip 压缩port: 9000, // 指定服务器端口号open: true, // 自动打开浏览器open: ['main.html'], // 自动打开浏览器并定向到http://localhost:9000/main.htmlhot: true, // 热更新historyApiFallback: true, // 支持HTML5的历史API(单页应用中很有用)},
});// wk.prod.config.js
const { merge } = require('webpack-merge')
const commonConfig = require('./wk.comm.config')module.exports = merge(commonConfig, {mode: "production",output: {clean: true,}, 
});

相关文章:

Webpack模式-Resolve-本地服务器

目录 ResolveMode配置搭本地服务器区分环境配置 Resolve 前面学习时使用了各种各样的模块依赖,这些模块可能来自于自己编写的代码,也可能来自第三方库,在 Webpack 中,resolve 是用于解析模块依赖的配置项,它决定了 We…...

【LLM论文日更】| 通过指令调整进行零样本稠密检索的无监督文本表示学习

论文:https://arxiv.org/pdf/2409.16497代码:暂未开源机构:Amazon AGI、宾夕法尼亚州立大学领域:Dense Retrieval发表:Accepted at DCAI24 workshopCIKM2024 研究背景 研究问题:这篇文章要解决的问题是如…...

02.01、移除重复节点

02.01、[简单] 移除重复节点 1、题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 2、解题思路 为了实现这一目标,我们可以使用一个哈希表(或集合)来记录已经遇到的节点值,逐步遍历链表并删…...

旅游推荐|旅游推荐系统|基于Springboot+VUE的旅游推荐系统设计与实现(源码+数据库+文档)

旅游推荐系统 目录 基于java的旅游推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&#xf…...

github项目--crawl4ai

github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目,没记错的话,昨天涨了3000多的star,今天又新增2000star。一款抓取和解析工具,简单写个demo感受下 这里我们使用cra…...

仅有N卡独显的情况下安装ubuntu是遇到的黑屏,加载卡顿等问题

Ubuntu安装的两个阶段都要进行一定的设置来临时禁用掉独显或者ubuntu的通用显卡驱动。 U盘启动阶段 U盘启动阶段要对U盘启动项进行设置,通过BIOS设置第一boot为USB hard disk后可以进到U盘引导项,第一项为 “try or install ubuntu”,倒计时10s后自动进入。 这个时候不要…...

Vite:为什么选 Vite

一、现实问题 在浏览器支持 ES 模块之前,JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们对 “打包” 这个概念熟悉的原因:使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运行的文件。 时过境迁,我…...

个人项目简单https服务配置

1.SSL简介 SSL证书是一种数字证书,由受信任的证书颁发机构(CA)颁发,用于在互联网通信中建立加密链接。SSL代表“安全套接层”,是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性…...

Rust 函数

Rust 函数 Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。函数是 Rust 编程语言中的基本构建块,用于封装可重用的代码块。本文将深入探讨 Rust 中的函数,包括其定义、特性、参数、返回值以及高级概念。 函数定义 在 Rust 中&a…...

微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器

微信小程序中的 <block> 元素&#xff1a;高效渲染与结构清晰的利器 在微信小程序的开发中&#xff0c;<block> 元素扮演着举足轻重的角色。尽管它不会在页面中渲染任何可见的节点&#xff0c;但作为一个逻辑上的容器&#xff0c;<block> 在条件渲染和循环渲…...

选读算法导论5.2 指示器随机变量

为了分析包括包括雇佣分析在内的许多算法&#xff0c;我们将使用指示器随机变量&#xff0c;它为概率和期望之间的转换提供了一个便利的方法&#xff0c;给定一个样本空间S和事件A&#xff0c;那么事件A对应的指示器随机变量&#xff1a; Xa 1 如果A发生    0 如果…...

大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

centos9 nginx 版本

centos9 安装 ssh -V OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024 openssl version OpenSSL 3.2.2 4 Jun 2024 (Library: OpenSSL 3.2.2 4 Jun 2024) sudo yum install nginx Installing:nginx x86_64 2:1.20.1…...

https访问报错:net::ERR_CERT_DATE_INVALLD

目录 简介异常排查原因解决补充 简介 访问https资源出现报错 异常 排查 将地址拿到浏览器进行访问&#xff0c;可以很清晰的看到出现该问题的原因 原因 1、SSL证书已过期 2、服务器日期不准&#xff0c;不在证书有效期 解决 1、重新申请SSL证书&#xff0c;并配置 2、校正…...

cat用来查看文件内容、合并文件,或者将文件内容输出到终端

cat 是 Unix 和 Linux 系统中的一个命令&#xff0c;它的名称来源于 “concatenate”&#xff08;连接&#xff09;&#xff0c;主要用来查看文件内容、合并文件&#xff0c;或者将文件内容输出到终端。 常用用法 查看文件内容 cat filename输出 filename 的内容到终端中。 例…...

基于ssm大学生自主学习网站的设计与实现

文未可获取一份本项目的java源码和数据库参考。 1、毕业论文&#xff08;设计&#xff09;的背景及意义&#xff1a; &#xff08;1&#xff09;研究背景 目前&#xff0c;因特网是世界上最大的计算机互联网络&#xff0c;它通过网络设备将世界各地互相独立的不同规模的局域…...

C++基础补充(01)C++11基于范围的for循环

文章目录 1. 基本语法1.1 decalaration默认获取值引用&自动类型推导&#xff08;auto&#xff09; 1.2 container数组STL容器初始化列表自定义类型返回容器的函数 2. 其他示例2.1 遍历数组2.2 遍历vector&#xff0c;并修改元素2.3 使用常量引用遍历&#xff0c;防止容器中…...

qt6 使用QPSQL

检查可用的数据库驱动&#xff1a; // iteator all database driverQStringList drivers QSqlDatabase::drivers();QStringList::iterator it;for (it drivers.begin(); it ! drivers.end(); it){qDebug() << *it;} qt6 自带pg数据库驱动&#xff1a; pro文件加个说明&…...

【PostgreSQL】提高篇——公用表表达式(CTE)和窗口函数

在这篇文章中&#xff0c;我将详细介绍 PostgreSQL 中的公用表表达式&#xff08;CTE&#xff09;和窗口函数&#xff0c;帮助你理解如何使用它们进行复杂的数据分析。我将通过具体的示例来演示这些概念的实际应用&#xff0c;并在每个示例中提供详细的解释和注释。 1. 公用表…...

【min25筛】【CF2020F】Count Leaves

题目 定义 f ( n , 0 ) 1 f(n,0)1 f(n,0)1&#xff0c; f ( n , d ) ∑ k ∣ n f ( k , d − 1 ) f(n,d)\sum_{k|n}f(k,d-1) f(n,d)∑k∣n​f(k,d−1) 给出 n , k , d n,k,d n,k,d&#xff0c;你需要求出: ∑ i 1 n f ( i k , d ) m o d ( 1 0 9 7 ) \sum_{i1}^n f(i^k…...

【d57】【sql】1661. 每台机器的进程平均运行时间

思路 一方面考察自连接&#xff0c;另一方面考察group by 这里主要说明 group by 用法&#xff1a; 1.在 SQL 查询中&#xff0c;GROUP BY 子句用于将结果集中的行分组&#xff0c;目的通常就是 对每个组应用聚合函数&#xff08;如 SUM(), AVG(), MAX(), MIN(), COUNT() 等…...

ArcGIS共享数据的最佳方法(不丢可视化、标注等各类显示信息一样带)

今天我们介绍一下ArcGIS数据共享的几个小妙招 我们时常要把数据发给对方&#xff0c;特别是很多新手朋友要将shp发给对方时只是发送了shp后缀的文件&#xff0c;却把shp的必要组成文件dbf、shx等等给落下了。 还有很多朋友给图层做好了符号化标注&#xff0c;但是数据一发给别…...

小程序this.getOpenerEventChannel()当前页面与navigateTo页面之间数据通信

this.getOpenerEventChannel() 是微信小程序中获取页面打开它的页面事件通道的方法。但是&#xff0c;这个方法只在页面是被wx.navigateTo打开的情况下才能使用。如果页面是通过其他方式打开的&#xff0c;比如wx.redirectTo&#xff0c;那么就无法使用这个方法。 解决方案&…...

调用飞书接口导入供应商bug

1、业务背景 财务这边大部分系统都是供应商项目&#xff0c;由于供应商的研发人员没有飞书项目的权限&#xff0c;涉及到供应商系统需求 财务这边都是通过多维表格进行bug的生命周期管理如图&#xff1a; 但多维表格没有跟飞书项目直接关联&#xff0c;测试组做bug统计的时候无…...

《深度学习》OpenCV 角点检测、特征提取SIFT 原理及案例解析

目录 一、角点检测 1、什么是角点检测 2、检测流程 1&#xff09;输入图像 2&#xff09;图像预处理 3&#xff09;特征提取 4&#xff09;角点检测 5&#xff09;角点定位和标记 6&#xff09;角点筛选或后处理&#xff08;可选&#xff09; 7&#xff09;输出结果 3、邻域…...

golang grpc初体验

grpc 是一个高性能、开源和通用的 RPC 框架&#xff0c;面向服务端和移动端&#xff0c;基于 HTTP/2 设计。目前支持c、java和go&#xff0c;分别是grpc、grpc-java、grpc-go&#xff0c;目前c版本支持c、c、node.js、ruby、python、objective-c、php和c#。grpc官网 grpc-go P…...

基于小程序+Vue + Spring Boot的进销存库存出库入库统计分析管理系统

目录 一、项目背景及需求分析 1. 项目背景 2. 需求分析 二、系统架构设计 1. 技术选型 2. 模块划分 三、数据库设计数据库表结构 四、前端实现 五、后端实现 1. RESTful API设计 2. 数据库操作 六、安全性和性能优化 1. 安全性 2. 性能优化 七、测试与部署 1. …...

【数据结构与算法】时间复杂度和空间复杂度例题

文章目录 时间复杂度常数阶时间O(1)对数阶时间O(logN)线性阶时间O(n)线性对数阶时间O(nlogN)平方阶时间O(n*n) 空间复杂度常量空间O(1)线性空间O(n)二维空间O(n*n)递归空间 时间复杂度 常数阶时间O(1) 代码在执行的时候&#xff0c;它消耗的时间并不随着某个变量的增长而增长…...

停止模式下USART为什么可以唤醒MCU?

在MCU的停止模式下&#xff0c;USART之类的外设时钟是关闭的&#xff0c;但是USART章节有描述到在停止模式下可以用USART来对MCU进行唤醒&#xff1a; 大家是否会好奇在外设的时钟被关闭的情况下&#xff0c;USART怎么能通过接收中断或者唤醒事件对MCU进行唤醒的呢&#xff1…...

Web安全 - 路径穿越(Path Traversal)

文章目录 OWASP 2023 TOP 10导图定义路径穿越的原理常见攻击目标防御措施输入验证和清理避免直接拼接用户输入最小化权限日志监控 ExampleCode漏洞代码&#xff1a;路径穿越攻击案例漏洞说明修复后的安全代码代码分析 其他不同文件系统下的路径穿越特性Windows系统类Unix系统&a…...