粉丝2778获赞1.6万

开发服务器的端口、代理跨域,这三个配置全在 vita 点 copy, 点 gsd 搞定。 听完这期,你会知道默认值是什么,什么时候需要改,改了之后解决了什么问题,以及 vita 在 这个环节做了怎样的取舍。先说端口, vita 开发服务器默认跑在五一七三,端口 这个数字没有什么特殊的意义,只是瑞特选了一个未被占用的常用端口,你不需要记它启动后端,终端会显示什么时候需要改。两种情况,一是五一七三被其他程序占用,二是团队有统一的端口规范,比如前端统一用八零八零, 改端口就一行配置写在 service 点 part 里。瑞特不限制你用什么端口,但会帮你检测端口是否可用, 被占用了会自动产至下一个,这个行为也是默认的,你可以选择关闭。再说代理, 这是开发环境最常用的配置,它的本质是解决跨域问题。跨域不是 vt 的 限制,是浏览器的安全策略。你的前端跑在 local host 五一七三,后端接口跑在 api 点 example 点 com 协议域名端口,任何一个不同浏览器就会拦截请求,你无法绕过,只能通过代理解决。代理的原理很简单, with 开发服务器收到你的前前端请求后,代替你向后端发请求,再把结果返回给你。因为服务器之间没有跨域限制,所以请求成功。你只需要在 with 点 gs 里配置。代理告诉 with, 凡是 请求路径以杠 api 开头的,都转发到你的后端地址,配置完你的前端代码里,嗯, 代码里的请求加上杠 api 这个前缀就可以了,前端不需要改任何代码,甚至不用知道真实后端地址。 vt 的 代理基于 http 代理这个东西, 支持路径重写,修改响应头更细颗粒的转发规则。这些配置下都在文档里按需取用 啊。跨域的问题到这里就已经解决了,但需要坦诚说一句,代理只在开发环境生效,生产环境你部署上线后,前端和后端同域,或者通过 ng 等反向代理处理跨域和 fit 无关。 不要把开发环境的代理配置理解为生产环境的解决方案,这是两个层面的问题。最后总结一下这三个配置的趋势。 vita 给你一个能直接跑的默认端口,让你不用配置就能启动 vita 给你代理配置的能力,因为跨域在开发环境是真实痛点, 他选择把这个能力交给你,而不是替你默认转发,因为你后端地址不确定。 with 不 提供生产环境的跨域方案,因为那不是他的职责,你用还是不用都清楚, 默认就够用,那就一行都不写,需要定制就在 with 点 copy, 点 gs 里改对应的那几行。 ok, 本期就到这里。

欢迎大家来到 ai 赋能 jvweb 开发机偷斗系统,第六天是搭建 vo 三环境和 xos, 今天开始做前端功能,我们先搭建前端环境, 先打开我们安装特斗的文件所在路径, 在上面地址输入 cmd, 输入命令 npm create vt, 这个命令的意思是创建基于 vt 构建的前端项目, 输入完回车, 这里选择 view, 这里选择 java script, 选择 yes, 这样的显示就是创建成功了。 复制这个路径,去浏览器浏览一下 这个页面是浏览器浏览一下, 我们打开 lma, 就是 同意 lma 选到 iint 模式,让它帮我们出使化配置,并统一接口。 复制提示词,粘贴到通用领码,生成 提示词,这里指定一下工作目录,否则读取不到。 生成比较久,这里跳过一下 a few moments later, 这里生成好了。打开左边的跨眼项目文件, 再打开 api underscore org dot m d 文件, 这里就是 xos 封装与 api 管理使用指南文档, 这里 api 是 已经封装好了。下一节课就开始写页面了, 下课。

呃,上来就懵逼了,不知如何下手啊哈哈哈哈啊哈哈哈问一下都没有用 excel 加 t s 加 v t 加 s 怎么开始创建项目 啊? 啊哦,原来是要先装 no 的 j s 环境。这个我装了。那我直接执行 npm create wit at latest 命令应该行了。复制 npm create wit at latest 命令,切换到编辑器界面的终端里,粘贴运行。 输入命令后,编辑器提示 need to install the following packages create wit app 九点零点六 ok to proceed why? 看不懂啥意思,截图问下冻妹 哦,豆妹告诉我,直接按一下键盘上的 y, 再回车就能继续创建项目了。那我就按照豆妹的提示直接 y 回车了。 哎,怎么报错了?赶紧截图问豆妹怎么回事, 都没叫我。别慌,这是 windows 上使用 n p m 执行命令时很常见的问题, 还信誓旦旦给了一套能解决百分之九十九这类问题的方案。他从报错信息看分析,问题大概率出在这几个地方。 n p m 缓存异常,之前的安装缓存死坏了,导致命令执行失败。 权限与执行环境问题, power shell 或 cmd 的 执行策略限制了命令运行。 node js 版本兼容性,虽然我用的是 v 二零点一,一点一符合要求,但可能和 m p m 版本不匹配。还给了几个解决方案,按顺序式,大概率第一步就。解决 方案一,该用 m p x 命令,最推荐挑过 m p m 大 局缓存,直接在终端输入下面这条命令,它会直接下载并运行 create bit, 不 走 n p m 的 全屏缓存,回车后按提示选择 react react 加 type script 就 能正常创建项目了。 方案二,清除 n p m 缓存加重装依赖。如果方案一还是报错,试试清理缓存 bash 运行,清除 n p m 缓存 n p m catch clean force, 再重新执行创建命令 n p m created wit at latest。 先试试方案一,复制 n p x create 杠 wit latest 命令到编辑其终端专替运行。 呃,又报错了,说好的大概率第一步就解决呢?试试方案二,复制清除 n p m 缓存命令 n p m cache clean force 到编辑器终端粘贴运行 终端返回 n p m one using force recommended protections disabled。 这是说明成功清理了 n p m 缓存,接下再把创建命令 n p m create witat latest 复制过来,到终端运行。 卧槽,怎么还报错?豆妹你在逗我吗?说好的百分之九十九解决问题呢?呃,后面跟豆妹掰扯了十分钟解决不了,没办法,只能让狄老师来救场了。呃,把报错截图给狄老师啊,狄老师,图片上传有些慢啊。 狄老师分析了一波,说我遇到的错误是因为当前 node js 版本 v 二零点一一点一缺少 ut style text 导出,该功能在 node js 二零点一二点零中首次引入,在 v 二二中更为稳定。而 created vita 的 新版本可能依赖了此 api。 他给了几个方案一,升级 node js 推荐。二、选用版本管理工具。三、临时降级 create vita 版本。四,清除缓存并重试。那我就来试试狄老师推荐的。方案一,升级 node js 呃,这 node js 官网下载有些看不懂,怎么选截图问下狄老师,狄老师让我下载 node js v 二四点一五点零 lts 版的 windows 安装包点 msi, 我 把它下载下来了,接下来安装 node js 安装 node js 过程中要做些勾选或选择,需要截图分析。 d 老师截图上传有些慢,这里为了快用逗妹来分析进行选择,因为这部分比较简单,逗妹应该没太大问题。安装完成后,验证版本在终端输入 node 杠 v n p m 杠 v 分 别验证版本能正常输出版本号,说明安装成功了。 接下来执行创建命令, n p m create wit at latest 看看行不行。可以看到没包错了,项目正在创建,现在要我命名项目了 啊啊啊,跌倒时牛逼!第一个方案就解决问题了,接下来输入项目名字,回车,终端返回 select free map 是 让我选一个框架,我要创建的项目是 react 加 ts 加 v 加 sauce。 那 当然选第三个 react, 然后回车 终端返回 select variant 是 让我选一个项目变体,第一第二都有 type script, 不 懂它们区别在哪儿?截图问下豆妹,豆妹让我直接默认选 type script 回车。下一步我追问下面那一项 type script 加 react compiler 是 什么? 哎呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀。 豆妹推荐选 type script 基础的 type script 模板,不带额外实验性功能,兼容性最好。 type script 加 react compiler, 带 react 官方新的自动翻译优化工具,减少手动写 use memo use callback, 但属于较新的功能部分,第三方库兼容问题多。虽然可以用,但新手建议先从基础 type script 模板开始。正好我是新手,那就选基础的 type script 模板。 回车后终端返回 install with mpm and start now。 呃,看不懂啥意思,截图问一下豆妹。 哎呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀哈原来是在问我要不要直接用 m p m 安装依赖,然后启动开发服务器? 选 yes which 会自动帮我执行 npm install 加 npm runtime, 安装完直接启动项目,省得我手动敲命令。那我直接选 yes 回车,等项目跑起来后再手动安装 s two hours later。 两个小时后,项目终于安装完成,本地卡发服务器也跑起来了。复制终端返回的项目链接地址到浏览器打开,可以看到项目运行起来了。 接下来准备安装 sas, 把安装 sas 的 命令 npm install sas 刚递复制过来,因为现在项目运行中无法在终端输入命令,先按 ctrl c 结束当前运行的项目,终端回到正常的命令输入状态, 再把命令粘贴到终端运行。接下来等它安装完,等待过程中突然发现安装 sas 的 命令 npm install sas 刚递,比其他命令后面多了一个刚递。有些好奇,就问了下豆妹, npm install sas 刚递和不加刚递有什么区别 哦? 加杠地等于只在开发使用,上线后不需要。不加杠地等于开发和上线运行都必须用,比如开发工具 suss, wit, script 等。加杠地,比如运行依赖 react, axiuse, 路由等。不加杠地 so this name? 过了一会儿,终端返回五 package sir, looking for funding run npm fund for details 看不懂啥意思,截图问下东妹。 哎呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀 呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀有五个包在寻求资金。赞到等我赚。 接下来在终端输入 m p m run def 启动项目。呃,怎么又报错了?经过排查发现原来是我安装 cs 到项目文件夹外面去了,还在项目文件夹外面启动项目,导致报错。我清理了项目文件夹外面的 cs, 依赖用 cd 进入项目文件夹里面重新安装 cs, 再次在终端收入 m p m run dev 启动项目,到浏览器刷新,可以看到项目正常启动了。项目启动后不知如何下手,截图问一下都没接下来呢,这些文件干什么的?我在哪里操作 啊? 大概简单来说, wait 加 react, 加 ts, 加 cs。 项目创建完文件就分两类,第一, s r c 文件加我写代码的地方 app 点 t s x 是 主页面 app 点 c s s 改成点 s c s s 就 能用 s。 第二,跟目录那些配置文件 package, 点 jason white coffee, 点 ts, node modules 自动生成的,不用管操作就三步,改后缀,写样式,写组建,保存完,自动刷新完事项目文件。看懂了,下一步就是真正写代码了, nice。

好,这样抽象完成以后呢,我们现在进来来看一下这个里面的一些结构啊,比如说本身我们如果要去做工程化相关的改造的话,我们其实可以看到在编辑 vita config 的 时候呢,其实有很多参数我们在这里面是没有给定的,对吧?因为我因为抽象的时候呢,我们可以以简单的方式来抽象,它里面是没有带那个 vita 的 配置文件, 但是 wait 配置文件其实很重要, wait 配置文件很重要,所以我现在先来抽象一下,比如说把 wait 的 叫 wait 点 config, 点 t s 啊, wait config t s, 然后我们直接导出,比如说 wait 导进来之后呢,直接把 define config 啊,这个时候里面的内容呢,我们就随便写一下 default define config 啊,这个里面呢,接下来我们就可以去指定相关的一些配置了,那比如说我们要做配置别名的处理啊,还有呢配置本地化服务的这个启动的端口,还有我们构建产物的一些配置,我们都可以在 vt config 点 t s 里面去配, 因为大家其实会发现整个 vt 的 架构呢,它是偏向于通过这个页面作为入口啊,在页面里面呢,通过 esm 的 方式来去加载一个 tss 文件,将 tss 文件引入以后, 这个是比如是入口,那在入口里面你去做一些处理,那这是我们一个简单的事例啊,那接下来呢,我们可以去配置一下,比如说它的 server, 我 们想把它的端口号呢改一下,改成多少?比如说改成呃,九千端口保存,那其实接下来你呢发现刷新已经失败了,对吧?你要把它改成九千端口回车,这样才可以 啊,九千端口啊,当然你还可以改成九零九零端口,然后呢再来试一下,当然这边可能需要重启一下啊,这个地方五幺七三可能需要重启一下,这个就我就把它直接 exit, 再重新 pmpv, 然后呢九零九零端口。 好,这样就没问题了。这基本的一些配置啊,那除了这个 server 配置以外呢?还有一些产物的配置,还有包括别名的配置,这都是一些基础配置啊。好,那除了关注这个 wait config 以外,还有一个需要重点关注的就是 ts config。 ts config 呢,只要是涉及到 ts 的 项目,我们都需要去在 ts config 里面去指明我们接下来要翻译的那些 ts 的 代码啊?应该是以什么样的形式来翻译的?那比如说 types 里面,我们要指定一些外部的跟 vt 相关的一些依赖,这种依赖呢是用来去做声明的 啊。还有一部分呢,比如说这个 target, 它是用来去声明接下来我们构建的产物,它的模块化标准是什么的啊?包括呢这个 bundle, 呃, bundle mode 就是 你构建的产物是一种什么样的形式的啊?还有包括这个跟校验相关的,是否是严格模式啊?是否是这个其他的这些内容? 好,那把 t s config 呢?给大家去做一个梳理啊,梳理完之后呢,大家比如说后续你在配置的时候,就直接按照这一套标准来去配就可以了。在这个里面呢,我们具体输输入一下啊,比如说进程,首先是那个 base name, 就 compiler option, 这里有个 base url。 如果是对于一些那个配置的话啊,就比如说像样式的配置,还有啊,当然跟跟那个路径相关的啊,比如说路径别名,那么就直接来一个 passes, 把别名也给它指定上,这个时候涉及到翻译的话,就可以用这部分来完成啊。好,这是 t s config 的 一些定义,这部分呢我们就完成了简单比较啊。

大家好,今天我们来聊聊 vit, 一个正在改变前端开发方式的前沿工具。当你写代码保存后,传统构建工具需要等好几秒才能看到效果,而 vit 却能在毫秒级反馈。 vit 到底是如何做到的?它为什么能这么快?让我们一探究竟。 vit 是 下一代前端开发与构建工具,有悟 js 的 作者尤雨曦创建,它的名字来自法语 wit, 意为快速。 wit 不 仅仅是 woo 的 构建工具,它是现代 javascript 生态的通用构建基座,支持 react、 spelt、 angular 等多种框架。 在 vt 出现之前, ypack 等传统构建工具存在几个核心问题。首先是冷启动慢,开发服务器启动时需要构建整个项目。其次是热更新慢,当项目变大时,修改一个文件可能需要等待十几秒。 第三是配置繁琐, webpack 的 配置复杂难懂。最后是反馈缓慢,修改代码后要等很久才能看到效果。这些问题严重影响了开发体验。 vt 的 核心设计理念解决了上述所有问题, 第一,它基于 e、 s、 m, 利用浏览器原生的模块系统,避免了不必要的打包。第二,它按需翻译,只翻译当前浏览器需要的代码,而非整个项目。 第三,它使用 s build 进行,依赖于构建,处理速度极快。第四,它的热更新是零成本的,指精确更新变化的模块,不重新构建整个项目。 wit 的 冷启动加速原理很巧妙,开发模式下, wit 不 会打包整个项目,而是作为中间服务器按需转换和提供原代码, 浏览器直接请求原文件。 wit 在 服务端按需编辑 text、 script、 j、 s、 x、 v 等文件,依赖部分使用 s build 预购键,处理速度比 webpack 快 十到一百倍, 结果是启动时间从几十秒降到了几百毫秒。 vt 的 热更新机制也很高效, 传统的 webpack 需要重新构建整个依赖链,而 vt 只需要处理变化的单个模块。 hm 二即热模块替换在浏览器内完成,无需服务器参与。 更重要的是, hm 二保持了应用状态,修改代码后页面不会刷新,用户交互不会被中断, 而且无论项目多大,热更新速度都保持恒定。在生产构建时, which 使用 roll up 作为打包器。 roll up 是 专门为 javascript 库设计的打包工具,擅长代码分割和 tree shaking。 wt 自动拆分公共模块,优化加载顺序、 css 和 javascript 自动压缩,去除空格和注视输出格式。支持 esm、 commonjs 和 iif, 适配各种使用场景。 wit 提供了丰富的开箱即用功能,它内置了 tax script, 支持无需额外安装或配置 css 预处理器,如 css styles 可以 直接使用,无需额外插件。 css modules 提供组建及样式隔离,避免样式冲突。 html 模板中的路径引用会自动转换,支持相对路径和别名。 wit 的 插件系统兼容 roll up 插件,这意味着它可以使用整个 n p m 生态中的插件。 官方提供了 v 三、 react、 swelt 等框架的插件社区,贡献了大量实用插件,包括服务端渲染、静态站点生成、 pwa 支持等。 如果你需要特殊功能,也可以基于 roll up 的 钩子系统开发自定义插件。 vit 提供了完整的环境变量和模式系统,你可以在项目根目录创建 ev 文件,管理不同环境的配置。只有以 vit 下划线开头的变量才会暴露给客户端,保证敏感信息安全。 模式系统支持 development production 以及自定义模式。 vita 还自动生成 text script 类型提示文件,让你在代码中获得 emv 变量的智能补全。 使用 vita 非常简单,只需运行 mpm create vita latest 创建一个新项目,选择你喜欢的框架模板,然后运行 mpm install 安装。依赖 启动开发服务器,使用 m p m run dev 访问本地端口,即可看到应用构建生产版本。使用 m p m run build vt, 会生成优化后的静态文件, 整个过程比传统工具快数倍。让我们对比一下 vita 和 webpack。 在 启动速度上, vita 比 webpack 快 十到一百倍,因为不需要预打包。在热更新上, vita 是 毫秒级, webpack, 可能要几秒。 在配置复杂度上, vita 追求零配置,而 webpack 需要大量配置。当然,在生态成熟度上, webpack 更成熟,插件更多,但 vita 正在快速追赶。 vita 已经被众多知名项目采用。 vita 三本身就使用 vita 作为构建工具。 vita press 是 vita press 的 继任者,用于生成文档站点。 next 三是 vood 全站框架,基于 wit 构建。 swelledkit 是 swelt 的 官方全站框架,也选择了 wit。 这些项目证明了 wit 的 可能性和成熟度, 围绕 wit 已经形成了丰富的生态系统。 wittest 是 wit 原生的单元测试框架,与 wit 完美集成。 wit 文档生成器,适合构建技术文档和簿刻 vite plugin pwa 添加渐近式 web 应用支持,让应用可以离线使用。 vite plugin ssr 提供服务端渲染能力,支持同构应用开发。 总结一下, vita 是 一个革命性的前端构建工具,它通过基于 e, s, m 的 开发模式和 s build 预构建,实现了毫秒级冷启动和热更新。 vita 提供了丰富的开箱即用功能和强大的插件系统 生产构建,使用 roll up 确保代码质量和性能。从 webpack 迁移到 vita 非常简单,几乎零配置。快速开发从 vita 开始。感谢观看,我们下期再见。

vite config 点 g s 这个文件本质是 vite 给你的控制面板,它呢,也不是必须存在的,但是当你需要掌控细节的时候,它是唯一的入口 啊。听完这期呢,你会清楚三个事情,第一,这个文件到底负责什么?第二,什么时候需要动它,什么时候完全不用管。第三, vite 在 设计上做了什么趋势,以及这意味着你适合还是不适合用这套体系。 先说它的定位, with 的 默认行为已经覆盖了绝大多数项目的启动需求,开发服务器,构建输出,静态资源处理,它都有一套内置的经过验证的配置, 你什么文件都不用写,项目就能照发不误。那 with 的 取舍在于约定优于配置。它先给你一套能直接用的默认值,让你从零开始写代码,而不是从零开始配工具, 这是它和传统构建工具最核心的区别。那为什么还要有这个文件?因为默认值不可能满足所有场景。当你需要偏离默认时, vt 点 copy 点 gs 就是 唯一的修改入口。比如开发服务器默认跑在五幺七三端口, 你想换到八零八零,呃,比如前端请求后端接口,开发环境需要带来解决跨域。 比如你想给路径取个别名,让导入语句不再写一长串相对路径。比如你要引入插件, 那些扩展 vita 能力的模块全部需要在这里注册。这些事的本质是,同一个 vita 给了你一套默认方案,但把修改权限完整保留给你,他不替你做决定,他把决定权交在你手里,用最干净的方式。 你需要知道什么时候动它,什么时候不动?如果你只写一个普通页面,用 vue 或 react 官方模板,不涉及特殊端口,不涉及代理,不涉及入境别名,不涉及插件,你根本不需要打开这个文件。但如果你要做的项目存在以下任何一种情况,端口冲突, 跨越请求团队约定入境别名,需要额外功能插件,你就必须接受它。 判断标准很简单,默认行为是否满足你,满足就不动,不满足就只改需要改的那一项。不要因为它存在就觉得必须写点什么。配置文件的存在感越低,说明默认值越适合你 啊。关于 vt 的 局限,需要坦诚说一句,这套约定优于配置的设计降低了上手门槛,但并非没有代价。当你需要高度定制的 建构建流程,比如复杂的多页应用,非标准化的资源处理,对打包细节的精细控制, vita 的 配置文件可能不如传统工具那样灵活。这不是缺陷,这是趋势。 vita 选择让百分之八十的场景体验最优,剩下百分之二十的高定制场景,您可能需要评估是否适合这套工具链。最后总结, vite 点 config 点 js 不是 一个需要恐惧或纠结的文件,它存在是因为 vite 相信你应该掌控自己的项目。它简洁是因为 vite 替你处理了复杂的那部分。 用得上就用,用不上就放着。你不需要为配置来配置,只需要在需要时知道去哪里改。 ok, 本期内容就到这里。

好,各位学前班同学,我们这里呢,来说一个打包优化的问题哈,我这里说打包优化,他解决的问题,可能很多朋友是并没有意识到的啊, 一定要注意听,就当我们完成开发之后,不是要打包吗?那打包结果里边呢,可能某一些包的体积呢,就会比较大,你看这里他占了一百二十四 kb, 对 吧?反正我这个是个水利工程啊。呃,一百二十多 kb 呢,其实也不大,就举个例子啊,就假设包的体积比较大,有人说这个包体积大,那很简单,我用一个什么动态导入,对吧?懒加载,我讲的东西不是那活哈, 在那个场景下哈,我这里要解决的问题是完全不一样的。我们首先分析一下这个包体机它为什么比较大,这是因为啊,在默认情况下,我们自己写的 gs 代码和一些第三方库的一些 gs 代码,它是合并在一起打包的,这好理解了,默认情况下,你没做过处理的话,都是这么合并在一起打包的。 那么合并在一起打包的话,会有什么样的一个问题呢?它主要的问题就在于将来如果说有一天我们自己写的 gs 代码发生了变化, 我们来看一下啊,自己写的 gs 代码就多打一个东西吧,代码发生变化了,对吧?然后呢,这个时候如果说你再去打包,你看一下会是一个什么样的结果?好,你看我们重新打包了,你看新打的这个 gs 的 文件指纹跟之前的文件指纹是不是不一样,这很好理解吧,因为代码变了呀, 变了过后文件指纹当然不一样了。哎,这个文件指纹不一样了,是不是就意味着浏览器那边他如果说访问你的站点,他需要重新去下载这个 gs, 而不能使用之前的缓存呢?对不对?但是你想一想,这一块合理吗?好像没有那么合理, 为啥呀?我就改了这么一点点东西,你要让我重新去下载一百多 kb, 实际上你们那个项目里边估计是十几兆几十兆了,你要让我去下载这么大的一个文件,何必呢? 你就下载那一点点改变不就完了吗?那现在之所以做不到,就是因为他们合并在一起打包了,你的代码跟第三方库的代码合并在一起打包了。所以这里的更好的方式是啥呢?就是分开打包,你自己代码写一块包,因为你自己代码经常在变动,对吧?觉得你迭代的升级经常发生变化,而那些第三方库呢,其实变化的情况比较少,他们都是比较稳定的,一般来说很少去改动别人写代码, 对吧?所以你最好的做法是分开打包,将来有一天你自己的代码变了,用户那边只需要去下载你自己的代码就行了,他不用去重新下载一些第三方库,懂这意思吧?那么这一块呢,就得涉及到承包。那怎么承包呢?那就是涉及到工程化的知识了。 首先分析一下啊,我们目前呢使用的是 which 的 工程,而 which 里边打包用的是啥?用的是 roll up, 所以 说我们要承包方向是啥方向,要去想 roll up 里边怎么去承包, 你只要知道如那不怎么分包,你就去做相应的配置,不就完事了吗?说原理永远是最最重要的。原理保证了啥?一是保证你能下手,遇到一个问题过后,你不至于说出现完全下不了手的情况。第二个层面的作用就是它可以保证你你制定的方向是没问题的, 可能细枝末节,到时候做的时候呢,要去查一查官方文档,查一查相关的一些 api, 但是你的方向是正确的,不至于走偏,你方向一旦选错了,他就越走越远了,越努力越失败。 你们不都说选择大于努力吗?原理就是来帮你做出正确的选择的,这也是为什么我要给大伙录制大师课,大师课是完全免费的啊,来领取。完事了,因为我发现很多同学,特别是从线下机构出来的,或者是自选自学的,你们学那玩意吧,他就不是那么重视原理, 他可以带你入门,可以把你带到这个行业里面找到一份工作,但是呢,由于你缺乏对原理的认知,导致你进这个行业是啥样,你基本上后边也就是啥样了发展?那不存在的。 而我们大师课就是来帮你补齐这个短板,这个短板已经折磨你很多年了,重视一下啊,你得当回事,咱们技术行业也不看别的,又不拼酒量,又不拼背景,又不拼爹, 又不拼才艺,还拼啥呀?不就拼技术吗?你身处一个技术行业里边,你不抵技术,那薪资就不理你,好理解吧,你花几天时间把咱们大师课认认真真学完?当然我又不是说要 diss 你 们以前学过的东西哈,就是每个阶段呢,学东西有每个阶段的作用, 过去的知识带你入门了,那我给你的知识是要带你发展,打开一个新的空间。因此呢,无论你是想高薪就业,还是想再次提薪,导师课都是你的地球课啊,这课呢,目前可以免费领哈。怎么领?在咱们账号主页,点击头像进入账号主页,点击提示领取。完事了啊,好说,来啊,我刚才从原地的角度来认知到 which 里边使用它来打包,那么我们现在要分包,那么就要去查它的配置啊,我这就不查了啊, 配置也很简单,到 which com 里边去干预一下它的配置。那么在 which 里边呢,有个 menu charts, 就是手动分包,怎么来分呢?就这里的每一个属性就是一个分包结果。首先呢,这个分包的名字你给他随便取一个名字啊,比方咱们取个分到名字随便取啊,然后呢,后边呢,就给上你要把哪些库分到这个包里边?比方说我们这里呢,用到哪些库啊?我这里是个室内工程啊,就用的比较简单,一个 u u 一个 low 大 些吧。好,一个 u u 一个 low 大 些。好,写进来了,那 这样一来,我再一打包,看一下 n p m rom, 你 看是不是就分包了?这是我们自己写的, g s, 只有一点九 kb。 然后呢,这下边是一些第三方库的分包结构,虽然它总的大小没变,但是呢,好在什么呢?好在我们将来如果说改动了代码,比方这个代码有三了,我们再一次打包来看一下。好,再打包。 你看到没,这个第三方库的 g s, 它的文件指纹有没有变,是不是就没变化?因为它没动啊,那么用户那边需不需要对它重新下载,就不需要,而用户那边要重新下载的是啥?只是我们改动的自己的 g s 只有一点九 kb 就 很快。 我们往往造成包体积很大,大部分工程都是因为一些第三方库占用的空间,而第三方库呢,是比较稳定的,因此呢,我们往往会把它分出去,其实第三方库里边也可以把它细分,对吧?绝对稳定的,像一些基础框架的东西,你把它分成一个包,然后呢一些不太稳定的,有可能将来会升级啊,替换的,那么再分一些包,对吧?还可以再细分,那如果说没有那么复杂的工程的话,一般就是把第三方库合并成, 当然呢,我们现在这个写法呢,是直接配置啊,那随着我们的开发的引进,有可能呢,这些东西啊,他会越来越多,比方说你又额外的安装了一些第三方库,除了你在代码里边引入之外,还要在这里配置一下,就挺麻烦的。那我们这里呢,能不能一劳永逸的写出一个逻辑,就是他所有的第三方库全部合并成一个包, 不用再动了,你会不会安装就安装你的,我这里不用改,可不可以呢?其实可以的啊,其实这里呢,你是可以把它写成一个函数的啊,这个函数的返回结果呢?是啥呢?就是你的打包名称, 返回的是打包名称,那么他就把相应的模块打到这个包里边,那么他传入的是啥呢?传入的是模块 id, 就 咱们可以打印看一下模块 id 啊,这里顺便说一下,如果说你没有返回的话,那么他就是使用默认情况啊,他自行处理好,咱们来打印看一下这个 id 啊, 好,到这里来打包,你看这个 id 打印出来了,注意是 note 环境啊,因为这个打印呢,它不是在浏览器环境,这打包吧,打包是在 note 环境里边,在 note 环境里边,你看每一个模块包括什么? gs, 包括还有一些 css, 对 吧?他们都在不断地去调这个函数,询问每一个模块应该放到哪个包里边, 那这一块我们是不是对第三方库来做一些单独处理?第三方库有什么样的特点?是不是在 node modules 里边,对吧?所以说我们这里判断一下啊,如果说 id includes node modules, 并且呢?呃,它是 nodes 点 gs 或者是 nodes 点 ts 啊,像这些代码模块的话,那么我就把它放到一个包里边啊, 其他的情况呢,你自行处理好,就写了这么一个简单逻辑过后呢,效果是一样的哈,咱们来看一下效果啊,打包,你看是不是你第三方库也被分出去了,但是这样的好处在于啥呢?就在于我们这个代码是不用动的,将来去安装一些新的第三方库,那么他会自动的进行判断,对吧?来进行合并 啊,就举到这么简单的例子啊,就希望朋友们对这一块的性能问题呢,是有意识的,知道这一块呢会产生一些性能问题,原因是啥?解决问题的方向你要清楚,方向不明的话,那你是下不了手的。

好,那么接下来呢,我们来看到第二个点,就是 wait 的 插件体系。 wait 插件体系,我们来想啊,插件体系,为什么我们在前面很多次公开课的时候都给大家说过插件体系这个概念啊,叫 plugins, 或者呢你给它叫 v 类和设计 为什么这么有名?这个设计思想为什么这么有名啊?我可以给大家看一个简单的例子,比如说我定的这个 cursor 另外一个地方。 好,我就讲一个,举一个最简单的例子啊,像我们以前,像我们的这个项目实战,刚才给大家演示的就是我们的整个呃,妙码 ai 引擎的那个项目实战 local host 三千端口吧。啊,就这个项目实战里面大,大家其实可以发现我们这个地方的节点呢,有一二十个啊,就各种各样不同的节点,比如说开始节点、大模型节点,各种节点,这些节点我们在实现的时候呢,如果你要保证高度统一的话, 你就必须要去把所有的那些配置给它做一个通用化的协议设计,那对应到这里就是,比如说我们有 那个 a l m 大 模型的设置啊,有工具设置,有类型节点或者条件节点的设置,那这些设置的内容呢?一个一个的,我们全部把它定义成通用的形式,就是叫 start setting form。 这个 form 呢,它是全部统一的啊,就比如说我有十个、二十个、三十个节点,它们的表单配置也是同一套,那最后我们怎么样去将它们渲染出来呢?就是通过动态渲染引擎叫 dynamic form render, 具体怎么来去区分,你就可以去获取到这个 node setting register 里面呢注册的各种类型的表单,比如说你注册的是一个开始表单, 大模型表单,或者是那个工具类的这样一个节点表单,或者说条件节点类的表单。那这些表单全部注册进去以后,你接下来在动态渲染的时候,就获取他们表单的具体的实力,这个叫插件化渲染啊,这个叫插件化体系。好,那再回到我们刚才这个问题里面来,我再问下大家,你像比如说我要对 css 翻 译,对吧?我要对 t s 翻译啊,我还要去对这个 gl 的 语言翻译, 还包括呢,我要对一些文件进行处理,嗯,我还要启动服务等等。你想这些能够被细划出来的一个一个的任务,它对应到 vita 体系里面,你都应该把它拆成一个一个单独的功能。 那有了这些一个一个单独的功能以后,你就要针对于这些功能去定义同一套规则,然后呢去使用它们啊,定义它们。

今天教大家这台路易三层管理交换机五幺零零怎么划分一类, 不用敲命令,直接进网页配置它,这台交换机它的默认网关是 十点四、四点七、七点两百,直接进网页。然后首先我们要划三划分三个微刃嘛,一到八划一个 九到十六,划一个十七到二十三,划一个二十四口作为上脸口,那先进入微刃划分, 然后这这边要添加,我这边添加了一个微顿一,微顿二、微顿三、微顿四,然后这边下面有个端端口列表批量设置,我们我已经把二 划分为一到八,是就是这个,这个统一为那个名称。二、微刃设置一个名称,然后九到十六就是微刃三, 然后十七到二十三就是微刃四。那最主要的我们要在三层管理这边要添加几个, 添加几个 s v i, 这个这个我们假设一到八调为二网段,那我们这边 d s c p 一定要开启,开启完 ip 地址填一下, 地址周期填一下,这样确定我,我这样子我这个一到八口就变成二网段,九到十六口变成三网段,然后 四网段就是十七到二十三。那我的网线假设切换在八口的位置, 我们来自动获取,看一下吧。假设我现在八口是二网段吧,那我现在把 ip 地址给它,自动获取一下, 自动后期看他会不会变成二网段。然后等一下教大家怎么添加规则,让他几个网段互相不能访问, 这个 立马就变成二网段了,那这样子说明设置成功了,等一下就要添加一个 t c 的 规则,但他一到八口访问不了九到 十六口,然后网口与网口之间不能访问,但是又可以通过二十四口、三连口来转发。

今天我们来学习二层交换机的配置,以 h 三 c s 一 八五零交换机为例,进行围栏画番 x s 和窗孔接口,完整实操。跟着我一步步配置一次,就能学会 给交换机插上抗锁线,这里要特别注意连接交换机的抗缩线,一头是 usb 插电脑,一头是 r j 四五插入交换机。这里我用 x l 作为远程终端软件, 点击串口,选择端口号波特律九六零零, 等待交换机初识化。先简单区分两个接口模式, x s 接口用来接电脑摄像头这类终端设备,一个接口只能属于一个微澜, 用来做终端接入。而 trunk 接口不一样,专门用于交换机之间的互联,可以携带多个微量标签,实现跨设备的同网段互通。 本次实验规划很标准, e 一 零一滑入微澜石 e 一 零二滑入微澜二石 e 一 零五配置创可作为上联赣道 开始配置前,我们先清空设备,配置 reset conflagration, 然后记得 reboot 重启输入系统 view 进入系统,试图 配置乌兰。第一步一定要先创建乌兰,我们依次创建微蓝十和微蓝二十,创建完成后, quit 退出,试图准备配置接口。 现在配置 access 接入端口 interface stick but ethernet 一 零一进入端口,先修改接口模式为 access port linkage access, 再把接口划入围栏时, port access 围栏时, quick 退出。 e 一 零一按照同样的方法操作至 e 二修改模式,划入 vlan 二时,先改接口类型,再划分 vlan 顺序,绝对不能错。 接下来配置 trunk, 部分交换机默认所有接口都是 access 模式,我们需要手动改成 trunk, 最重要一点, trunk 接口默认只放行微澜。一,我们需要手动命令放行飞澜岸时,微澜,二时 进入 g e 五接口 port link type trunk port trunk permit wheel and 十二十, 输入 display vlan o 查看我们配置的 vlan, 可以 看到 tact port 带标签端口和 en tact port 无标签端口,对应端口无误,说明标签分配逻辑是正确的。 退出系统仕图 safe 命令保存交换机配置到这里,交换机配置完成。 这套配置的作用很明确,通过微澜划分隔离不同网段设备,杜绝局域网广播风暴,同时依靠 trunk 接口实现多微澜跨设备互通。 以上就是 h 三 c s 一 八五零交换机完整的 vla 实操教程了,不同型号、不同系统版本的交换机命令可能存在差异,具体以设备实际版本为准。想要学习三层交换机防火墙策略,可以等我下期的教程。