探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发
框架太“重”了:通常一个小型项目只由少数几个简单页面构成,如果使用 Vue 或者 React 这些框架来研发的话,有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等),这些代码对于小型项目而言是冗余的,它们影响了包体大小,进而影响页面的启动速度和执行性能。
打包太慢了:以 Vue CLI 为例,它的底层基于 Webpack,虽然 Webpack 具备更强大的功能和灵活性,但相比于 Vite、Esbuild 这些以速度为标杆的构建工具来说,它的速度确实慢了一些,影响了研发效率。
文章目录
- 一、 创建基本项目
- 1.1 全局安装 Vite
- 1.2 创建 Svelte 项目
- 二、目录结构
- 三、svelte路由配置
- 3.1 npm安装
- 3.2 定义router
- 3.2.1 动态导入组件
- 3.2.2 在页面之间导航
- 3.3 使用路由
- 四、svelte CSS预处理器
- 4.1 less的使用
- 4.1.1 npm安装
- 4.2 Tailwind CSS的使用
- 五、svelte环境变量配置
- 5.1 环境变量命名规则
- 5.2 .env文件的使用
- 5.3 在代码中使用环境变量
- 5.4 配置运行与打包环境
- 六、svelte国际化
- 6.1 安装 `svelte-i18n`
- 6.2 初始化 `svelte-i18n`
- 6.3 创建语言文件
- 6.4 在 Svelte 组件中使用 `svelte-i18n`
- 6.5 切换语言
- 6.6 在 `App.svelte` 中引入 `i18n.js`
- 6.7 运行项目
- 6.8 构建项目
- 6.9 预览项目
- 6.10 检查项目
- 七、svelte接口请求
- 7.1 安装 `axios`
- 7.2 创建 `axios` 实例
- 7.3 在 Svelte 组件中使用 `axios`
- 7.4 处理请求和响应拦截器
- 7.5 在 `App.svelte` 中使用 `axios`
- 7.6 处理错误
- 八、svelte组件库
- 九、svelte阿里图标库
- 9.1 获取阿里图标
- 9.2 将图标文件放入项目
- 9.3 引入图标文件
- 9.4 使用图标
- 9.5 动态切换图标
- 9.6 使用 Symbol 方式(可选)
- 9.7 样式调整(可选)
- 9.8 示例代码
- 十、svelte轮播图
- 十一、store数据共享
- 1. 创建 `store` 模块
- 2. 创建全局 `store`
- 3. 在组件中使用 `store`
- 4. 封装 `store` 的优势
- 5. 示例:`about.svelte` 中使用 `store`
- 十二、扩展内容
- 十三、框架git地址
一、 创建基本项目
1.1 全局安装 Vite
通过 npm 全局安装 Vite
npm install vite
1.2 创建 Svelte 项目
Vite 原生支持直接通过脚手架创建 Svelte 项目,执行以下命令
npm create vite@latest
输入命令后选择如下
✔ Project name: vite-svelte? Select a framework: › - Use arrow-keys. Return to submit.VanillaVueReactPreactLit
❯ SvelteSolidQwikOthers? Select a variant: › - Use arrow-keys. Return to submit.TypeScript
❯ JavaScriptSvelteKit
基本项目创建完成
二、目录结构
根据上一步创建项目,项目的基本结构栓是完成了,但这样还是不够的,接下来介绍一下完整的项目目录

三、svelte路由配置
3.1 npm安装
项目中安装svelte-spa-router
npm install svelte-spa-router
3.2 定义router
- 每条路由都是一个普通的Svelte组件,包含标记、脚本、绑定等。任何Svelte组件都可以是路由。
- 路由定义只是一个JavaScript字典(对象),其中键是一个带有路径(包括参数等)的字符串,值是路由对象。
import Home from './routes/Home.svelte'
import Author from './routes/Author.svelte'
import Book from './routes/Book.svelte'
import NotFound from './routes/NotFound.svelte'const routes = {// Exact path'/': Home,// Using named parameters, with last being optional'/author/:first/:last?': Author,// Wildcard parameter'/book/*': Book,// Catch-all// This is optional, but if present it must be the last'*': NotFound,
}
3.2.1 动态导入组件
使用动态导入的优点是,如果您的打包器支持,您可以启用代码拆分并减小发送给用户的捆绑包的大小。这已经用包括Rollup和Webpack在内的捆绑器进行了测试
- 要使用动态导入的组件,您需要利用包装方法(根据路线包装文档,该方法可用于各种操作)。首先,导入wrap方法:
import {wrap} from 'svelte-spa-router/wrap'
- 然后,在路由定义中,使用wrap方法包装路由,将一个函数传递给asyncComponent属性,该函数将动态导入的组件返回给asyncComponent:
wrap({asyncComponent: () => import('./Foo.svelte')
})
案例:
// Import the wrap method
import {wrap} from 'svelte-spa-router/wrap'// Note that Author and Book are not imported here anymore, so they can be imported at runtime
import Home from './routes/Home.svelte'
import NotFound from './routes/NotFound.svelte'const routes = {'/': Home,// Wrapping the Author component'/author/:first/:last?': wrap({asyncComponent: () => import('./routes/Author.svelte')}),// Wrapping the Book component'/book/*': wrap({asyncComponent: () => import('./routes/Book.svelte')}),// Catch-all route last'*': NotFound,
}
3.2.2 在页面之间导航
- 锚点导航
<a href="#/book/123">Thus Spoke Zarathustra</a>
- use:link导航(可以使用use:link操作,而不必在每个链接前键入#)
<script>
import {link} from 'svelte-spa-router'
</script>
<a href="/book/321" use:link>The Little Prince</a>
3.3 使用路由
在app.svelte中全局调用
import Router from 'svelte-spa-router'
然后,通过将组件放置在标记中,将路由器显示在您想要的任何位置
<body><Router {routes}/>
</body>
四、svelte CSS预处理器
4.1 less的使用
4.1.1 npm安装
安装less与svelte-preprocess-less依赖
npm install --save-dev svelte-preprocess-less less
在vite.config.js进行配置
import { less } from 'svelte-preprocess-less'
export default defineConfig({plugins: [svelte({preprocess: {style: less(),},})],
})
4.2 Tailwind CSS的使用
通过npx安装直接配置完 tailwindcss
npx sv add tailwindcss
五、svelte环境变量配置
Vite中使用环境变量主要通过.env文件来配置,这些文件根据不同的环境(开发、测试、生产等)有不同的命名规则和使用方式。
5.1 环境变量命名规则
所有环境变量必须以VITE_为前缀
VITE_API_URL=https://api.example.com
VITE_APP_TITLE=My Vite App
5.2 .env文件的使用
1. 通用环境变量:在项目的根目录下创建.env文件,用于定义所有环境通用的变量。
2. 特定环境变量:根据不同的环境需求,可以创建以下类型的.env文件:
.env.devt:仅在开发环境中使用。
.env.pro:仅在生产环境中使用。
.env.local:通用的本地配置文件,通常不提交到版本控制系统中。
.env.development.local:开发环境的本地配置文件。
.env.production.local:生产环境的本地配置文件
5.3 在代码中使用环境变量
console.log(import.meta.env.VITE_API_URL);
5.4 配置运行与打包环境
"scripts": {"dev": "vite --mode dev",//运行dev环境"dev-pro": "vite --mode pro",//运行pro环境"build": "vite build","preview": "vite preview","check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"},
六、svelte国际化
svelte-i18n 是一个用于 Svelte 应用的国际化(i18n)库,它可以帮助你轻松地管理和切换应用中的多语言内容。以下是如何在 Svelte 项目中使用 svelte-i18n 的基本步骤:
6.1 安装 svelte-i18n
首先,确保你已经安装了 svelte-i18n。根据你的 package.json 文件,它已经存在于 dependencies 中。
npm install svelte-i18n
6.2 初始化 svelte-i18n
在你的 Svelte 项目中,通常会在 src 目录下创建一个 i18n.js 或 i18n.ts 文件来初始化 svelte-i18n。
// src/i18n.js
import { init, register, locale } from 'svelte-i18n';// 注册默认语言
register('en', () => import('./locales/en.json'));
register('zh', () => import('./locales/zh.json'));// 初始化并设置默认语言
init({fallbackLocale: 'en',initialLocale: 'en',
});
6.3 创建语言文件
在 src/locales 目录下创建语言文件,例如 en.json 和 zh.json。
// src/locales/en.json
{"welcome": "Welcome to Svelte App","greeting": "Hello, {name}!"
}
// src/locales/zh.json
{"welcome": "欢迎使用 Svelte 应用","greeting": "你好, {name}!"
}
6.4 在 Svelte 组件中使用 svelte-i18n
你可以在 Svelte 组件中使用 $t 函数来获取翻译内容。
<script>import { t } from 'svelte-i18n';
</script><h1>{$t('welcome')}</h1>
<p>{$t('greeting', { name: 'John' })}</p>
6.5 切换语言
你可以通过 locale.set 方法来动态切换语言。
<script>import { locale } from 'svelte-i18n';
</script><button on:click={() => locale.set('en')}>English</button>
<button on:click={() => locale.set('zh')}>中文</button>
6.6 在 App.svelte 中引入 i18n.js
- 确保在
App.svelte或你的主入口文件中引入i18n.js。
<script>import './i18n.js';
</script>
- 确保加载完i18n后在加载页面
<script>import { locale } from "svelte-i18n";import Router from "@/router/Router.svelte";
</script>
{#if $locale}<Layout><Router /></Layout>
{/if}
6.7 运行项目
使用 npm run dev 运行你的项目,你应该能够看到国际化内容并根据按钮切换语言。
6.8 构建项目
当你准备好发布项目时,使用 npm run build 来构建项目。
npm run build
6.9 预览项目
使用 npm run preview 来预览构建后的项目。
npm run preview
6.10 检查项目
使用 npm run check 来检查 Svelte 和 TypeScript 的类型。
npm run check
通过以上步骤,你应该能够在 Svelte 项目中成功使用 svelte-i18n 来实现国际化功能。
七、svelte接口请求
在 Svelte 项目中使用 axios 进行 HTTP 请求是非常常见的操作。以下是如何在 Svelte 项目中集成和使用 axios 的步骤:
7.1 安装 axios
首先,确保你已经安装了 axios。根据你的 package.json 文件,它已经存在于 dependencies 中。
npm install axios
7.2 创建 axios 实例
为了更好的管理和配置 axios,通常会在 src/utils 目录下创建一个 api.ts 或 api.js 文件来创建 axios 实例。
// src/utils/api.ts
import axios from 'axios';const api = axios.create({baseURL: 'https://api.example.com', // 你的 API 基础 URLtimeout: 10000, // 请求超时时间headers: {'Content-Type': 'application/json',},
});export default api;
7.3 在 Svelte 组件中使用 axios
你可以在 Svelte 组件中导入并使用 axios 实例来发送 HTTP 请求。
<script lang="ts">import api from '@/utils/api';import { onMount } from 'svelte';let data: any;onMount(async () => {try {const response = await api.get('/endpoint');data = response.data;} catch (error) {console.error('Error fetching data:', error);}});
</script>{#if data}<div><h1>{data.title}</h1><p>{data.description}</p></div>
{/if}
7.4 处理请求和响应拦截器
你可以在 axios 实例中添加请求和响应拦截器,以便在请求发送前或响应到达后进行一些处理。
// src/utils/api.ts
import axios from 'axios';const api = axios.create({baseURL: 'https://api.example.com',timeout: 10000,headers: {'Content-Type': 'application/json',},
});// 请求拦截器
api.interceptors.request.use((config) => {// 在请求发送之前做一些处理,例如添加 tokenconst token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;},(error) => {return Promise.reject(error);}
);// 响应拦截器
api.interceptors.response.use((response) => {// 对响应数据做一些处理return response;},(error) => {// 对响应错误做一些处理return Promise.reject(error);}
);export default api;
7.5 在 App.svelte 中使用 axios
你可以在 App.svelte 中使用 axios 来获取数据或执行其他 HTTP 操作。
<script lang="ts">import api from '@/utils/api';import { onMount } from 'svelte';let userData: any;onMount(async () => {try {const response = await api.get('/user');userData = response.data;} catch (error) {console.error('Error fetching user data:', error);}});
</script>{#if userData}<div><h1>Welcome, {userData.name}!</h1><p>Email: {userData.email}</p></div>
{/if}
7.6 处理错误
在使用 axios 时,确保你处理了可能的错误,例如网络错误或服务器错误。
<script lang="ts">import api from '@/utils/api';import { onMount } from 'svelte';let userData: any;let errorMessage: string | null = null;onMount(async () => {try {const response = await api.get('/user');userData = response.data;} catch (error) {errorMessage = 'Failed to fetch user data. Please try again later.';console.error('Error fetching user data:', error);}});
</script>{#if userData}<div><h1>Welcome, {userData.name}!</h1><p>Email: {userData.email}</p></div>
{:else if errorMessage}<p style="color: red;">{errorMessage}</p>
{/if}
通过以上步骤,你应该能够在 Svelte 项目中成功使用 axios 来进行 HTTP 请求。
八、svelte组件库
这里用的是melt-ui,访问地址是:https://www.melt-ui.com/docs/introduction
一键配置
npx @melt-ui/cli@latest init
九、svelte阿里图标库
在 Svelte 项目中使用阿里图标(如 iconfont)可以通过以下步骤实现:
9.1 获取阿里图标
- 访问 iconfont 并登录。
- 创建一个项目,将需要的图标添加到项目中。
- 选择
Font class或Symbol方式生成代码。 - 点击
下载至本地,解压后得到图标文件。
9.2 将图标文件放入项目
将下载的图标文件(如 iconfont.css 和字体文件)放入项目的 public 或 src/assets 目录中。
例如:
public/iconfont/iconfont.cssiconfont.ttficonfont.wofficonfont.woff2
9.3 引入图标文件
在 App.svelte 或 main.ts 中引入 iconfont.css 文件。
<script lang="ts">import "./app.css";import Layout from "@/layout/Layout.svelte";import Router from "@/router/Router.svelte";import { locale } from "svelte-i18n";import Toast from "./components/Toast.svelte";import { toast } from "@/utils/toastService";// 引入阿里图标import '../public/iconfont/iconfont.css';
</script>
9.4 使用图标
在 Svelte 组件中使用阿里图标,直接通过 class 引用图标类名。
<div><i class="iconfont icon-home"></i> <!-- icon-home 是图标类名 --><i class="iconfont icon-user"></i> <!-- icon-user 是图标类名 -->
</div>
9.5 动态切换图标
如果需要动态切换图标,可以将图标类名绑定到变量。
<script lang="ts">let iconClass = 'icon-home';
</script><div><i class={`iconfont ${iconClass}`}></i><button on:click={() => iconClass = 'icon-user'}>切换图标</button>
</div>
9.6 使用 Symbol 方式(可选)
如果选择 Symbol 方式,需要引入 iconfont.js 文件,并使用 <svg> 标签。
<script lang="ts">import '../public/iconfont/iconfont.js';
</script><svg class="icon" aria-hidden="true"><use xlink:href="#icon-home"></use> <!-- #icon-home 是图标 ID -->
</svg>
9.7 样式调整(可选)
如果需要调整图标大小或颜色,可以通过 CSS 设置。
<style lang="less">.iconfont {font-size: 24px;color: #333;}
</style>
9.8 示例代码
以下是一个完整的示例:
<script lang="ts">import "./app.css";import Layout from "@/layout/Layout.svelte";import Router from "@/router/Router.svelte";import { locale } from "svelte-i18n";import Toast from "./components/Toast.svelte";import { toast } from "@/utils/toastService";// 引入阿里图标import '../public/iconfont/iconfont.css';let iconClass = 'icon-home';
</script>{#if $locale}<Layout><Router /></Layout>{#if $toast.visible}<Toast message={$toast.message} />{/if}
{/if}<div><i class={`iconfont ${iconClass}`}></i><button on:click={() => iconClass = 'icon-user'}>切换图标</button>
</div><style lang="less">.iconfont {font-size: 24px;color: #333;}
</style>
通过以上步骤,你可以在 Svelte 项目中成功使用阿里图标。如果需要更多定制化功能,可以参考 iconfont 官方文档。
十、svelte轮播图
这里用的是https://3.swiper.com.cn/
下载引入相关css与js即可
demo如下
<script>import { onMount } from 'svelte';import '@/utils/swiper/swiper.min.js';import '@/utils/swiper/swiper.min.css';let swiperInstance;onMount(() => {// 初始化 SwiperswiperInstance = new Swiper('.swiper-container', {pagination: '.swiper-pagination',paginationClickable: true,autoplay:2500,loop:true});});</script><style>html, body {position: relative;height: 100%;}body {background: #eee;font-family: Helvetica Neue, Helvetica, Arial, sans-serif;font-size: 14px;color:#000;margin: 0;padding: 0;}.swiper-container {width: 100%;height: 350px;}.swiper-slide {text-align: center;font-size: 18px;background: #fff;/* Center slide text vertically */display: -webkit-box;display: -ms-flexbox;display: -webkit-flex;display: flex;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-justify-content: center;justify-content: center;-webkit-box-align: center;-ms-flex-align: center;-webkit-align-items: center;align-items: center;}</style><!-- Swiper --><div class="swiper-container"><div class="swiper-wrapper"><div class="swiper-slide">Slide 1</div><div class="swiper-slide">Slide 2</div></div><!-- Add Pagination --><div class="swiper-pagination"></div>
</div>
十一、store数据共享
在 Svelte 中,store 是一个核心概念,用于管理应用的状态。为了更好地组织代码,可以将 store 封装为模块,包括 state、actions、getters 和 mutations,类似于 Vuex 或 Redux 的设计模式。以下是如何封装 store 的示例:
1. 创建 store 模块
在 src/store 目录下创建一个模块,例如 centerStore.ts,用于管理特定模块的状态和逻辑。
// src/store/centerStore.ts
import { writable, derived } from 'svelte/store';// State
const state = writable({userData: null,loading: false,error: null,
});// Actions
const actions = {async getUserData(params: { onlyMakeTheSame: boolean }) {try {state.update((s) => ({ ...s, loading: true, error: null }));// 模拟 API 调用const response = await fetch('/api/user', { method: 'GET' });const data = await response.json();state.update((s) => ({ ...s, userData: data, loading: false }));} catch (error) {state.update((s) => ({ ...s, error: error.message, loading: false }));}},
};// Getters
const getters = {userData: derived(state, ($state) => $state.userData),isLoading: derived(state, ($state) => $state.loading),error: derived(state, ($state) => $state.error),
};// Mutations (可选)
const mutations = {setUserData(userData: any) {state.update((s) => ({ ...s, userData }));},
};// 导出模块
export const centerStore = {state,actions,getters,mutations,
};
2. 创建全局 store
在 src/store/index.ts 中整合所有模块,创建一个全局 store。
// src/store/index.ts
import { centerStore } from './centerStore';export const store = {center: centerStore,
};
3. 在组件中使用 store
在 Svelte 组件中导入并使用 store。
<script lang="ts">import { store } from '@/store/index';import { onMount } from 'svelte';// 获取 state 和 gettersconst { state, getters } = store.center;// 调用 actionfunction fetchData() {store.center.actions.getUserData({ onlyMakeTheSame: false });}onMount(() => {fetchData();});
</script>{#if $getters.isLoading}<p>Loading...</p>
{:else if $getters.error}<p style="color: red;">Error: {$getters.error}</p>
{:else if $getters.userData}<div><h1>User Data</h1><pre>{JSON.stringify($getters.userData, null, 2)}</pre></div>
{/if}<button on:click={fetchData}>Refresh Data</button>
4. 封装 store 的优势
- 模块化:将状态和逻辑按模块划分,便于维护和扩展。
- 复用性:
actions和getters可以在多个组件中复用。 - 可测试性:
actions和mutations可以单独测试。 - 清晰性:
state、actions、getters和mutations分离,代码结构更清晰。
5. 示例:about.svelte 中使用 store
根据你的 about.svelte 文件,可以这样使用 store:
<script lang="ts">import { t, locale } from "svelte-i18n";import { toast } from '@/utils/toastService';import { store } from '@/store/index';function getData() {store.center.actions.getUserData({ onlyMakeTheSame: false });}
</script><h1>{$t("welcome")}</h1>
<p>{$t("about")}</p><button on:click={getData}>获取接口数据</button>{#if $store.center.getters.isLoading}<p>Loading...</p>
{:else if $store.center.getters.error}<p style="color: red;">Error: {$store.center.getters.error}</p>
{:else if $store.center.getters.userData}<div><h1>User Data</h1><pre>{JSON.stringify($store.center.getters.userData, null, 2)}</pre></div>
{/if}
通过以上步骤,你可以在 Svelte 项目中封装 store,并实现 state、actions、getters 和 mutations 的分离,使代码更易于维护和扩展。
十二、扩展内容
这里由于使用的melt-ui没有toast提示于是做了一个全局组建toas.svelte
- 组建创建
<script>import { fade } from "svelte/transition";export let message = "";export let duration = 3000; // 持续时间,单位毫秒let visible = false;const showToast = () => {visible = true;setTimeout(() => {visible = false;}, duration);};showToast(); // 显示Toast
</script>{#if visible}<div class="toast" transition:fade>{message}</div>
{/if}<style>.toast {position: fixed;top: 300px;left: 50%;transform: translateX(-50%);padding: 10px 20px;background-color: #333;color: white;border-radius: 5px;z-index: 1000;}
</style>
- toastService封装
import { writable } from 'svelte/store';
function createToast() {const { subscribe, set, update } = writable({ message: '', visible: false });function show(message, duration = 3000) {set({ message, visible: true });setTimeout(() => {update(current => ({ ...current, visible: false }));}, duration);}return {subscribe,show, // 公开show方法供外部调用};
}export const toast = createToast(); // 创建并导出toast服务实例
- 全局调用app.svelte
<script lang="ts">import Toast from "./components/Toast.svelte";import { toast } from "@/utils/toastService";
</script>{#if $toast.visible}<!-- 使用$来访问store的值 --><Toast message={$toast.message} /><!-- 将消息传递给Toast组件 -->{/if}
- 使用
import { toast } from '@/utils/toastService';toast.show('Hello, this is a toast!')
十三、框架git地址
https://gitee.com/cyp926/svelte-vite
相关文章:
探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发
框架太“重”了:通常一个小型项目只由少数几个简单页面构成,如果使用 Vue 或者 React 这些框架来研发的话,有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等),这些代码对于小型项目而言是…...
3D数据共享标准——GLB文件格式揭秘
GLB 文件格式:跨平台 3D 数据共享的标准 简介 在这个数据爆炸的时代,3D 数据因其直观、逼真的特点而得到广泛应用。然而,不同 3D 软件和平台之间的兼容性一直是一个难题。 为了解决这一问题,GLB 文件格式应运而生。作为一种标准…...
微信小程序事件绑定基本语法
微信小程序使用 bind 或 catch 前缀绑定事件,语法如下: <组件 bind事件名"处理函数" catch事件名"处理函数"></组件> bind:事件绑定,允许事件冒泡(向父组件传递)。 catc…...
页面编辑器CodeMirror初始化不显示行号或文本内容
延迟刷新 本来想延迟100毫秒的,但是会出现样式向左偏移的情况,于是试了试500毫秒,发现就没有问题了,可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…...
vscode 连不上 Ubuntu 18 server 的解决方案
下载 vscode 历史版本 18.5(windows请装在 系统盘 C 盘) 打开 vdcode,将 自动更新 设置为 None (很关键,否则容易前功尽弃) 重命名(删除) 服务器上的 .vscode-server 文件夹 重新…...
云原生运维在 2025 年的发展蓝图
随着云计算技术的不断发展和普及,云原生已经成为了现代应用开发和运维的主流趋势。云原生运维是指在云原生环境下,对应用进行部署、监控、管理和优化的过程。在 2025 年,云原生运维将迎来更加广阔的发展前景,同时也将面临着一系列…...
Redis进阶--哨兵
目录 一、引言 二、介绍 三、哨兵的核心功能 四、使用docker进行单个主机redis主从复制哨兵操作 五、哨兵重新选取主节点的流程 1.主观下线 2.客观下线 3.主节点挂了 4.挑选新主节点 六、总结 一、引言 如果主从复制中,主节点挂了,从节点会迷茫…...
Franka 机器人x Dexterity Gen引领遥操作精细任务新时代
教授机器人工具灵活操作难题 在教授机器人灵活使用工具方面,目前主要有两种策略:一是人类遥控(用于模仿学习),二是模拟到现实的强化学习。然而,这两种方法均存在明显的局限性。 1、人类遥控(用…...
UE5 RPC调用示例详解
文章目录 前言一、示例场景二、代码实现三、关键点解析3.1 RPC类型选择3.2 可靠性设置3.3 权限控制3.4 输入处理 四、测试与验证总结 前言 在UE5中,RPC(远程过程调用)是实现多人游戏逻辑同步的核心机制。以下通过一个玩家跳跃的示例…...
专题|MATLAB-R语言Logistic逻辑回归增长模型在互联网金融共生及移动通信客户流失分析实例合集
全文链接:https://tecdat.cn/?p41343 作为数据科学家,我们始终关注如何通过模型创新揭示复杂系统的动态规律。本专题合集聚焦两大核心应用场景,通过 Logistic 增长模型与逻辑回归技术,为互联网金融共生演化与移动通信客户流失预警…...
从零构建一个全栈AI应用:Next.js + FastAPI + OpenAI API
💡 为什么写这篇文章? 很多开发者希望构建一个能“聊天、问答、调用AI能力”的完整应用,但在前端、后端、模型接口之间打通时,常常踩坑。 今天这篇文章将手把手教你如何从零构建一个 AI 全栈应用: 前端用 Next.js 构…...
idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊
idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊 在 IntelliJ IDEA(或其他 JetBrains 系列 IDE)中无法运行某些命令,但在系统的命令提示符(CMD)中可以正常运行,这种情况通常是由于以下原因之一导致的…...
Dify 生成提示词的 Prompt
Dify 生成提示词的 Prompt **第1次提示词****第2次提示词****第3次提示词**总结 Dify 生成提示词是,会和LLM进行3次交互,下面是和LLM进行交互是的Prompt。 以下是每次提示词的概要、目标总结以及原始Prompt: 第1次提示词 概要: …...
ocr python库
ocr python库 上手Git、Gitee和Github!watt toolkit...
【学生管理系统升级版】
学生管理系统升级版 需求分析:注册功能:登录功能:验证码规则:忘记密码: 实操:系统主页面注册功能登录功能忘记密码效果演示 需求 为学生管理系统书写一个登陆、注册、忘记密码的功能。 只有用户登录成功之后&…...
HTTP:二.URI及相关术语
HTTP相关技术和术语 WEB开发语言 **http:**Hyper Text Transfer Protocol 应用层协议,默认端口: 80/tcp WEB前端开发语言: htmlcssjavascripthtml Hyper Text Markup Language 超文本标记语言,编程语言,主要负责实现页面的结构 范例:html 语言 <html> <h…...
Web3 的云基础设施正在成型,Polkadot 2.0 用三项技术改写“上链成本”
在Web3基础设施内卷加剧的今天,“如何以更低成本、更大灵活性部署一条高性能应用链”正成为开发者们最关心的问题。而刚刚走出“技术慢热”误区的Polkadot,正在用一套名为 Polkadot 2.0 的架构升级方案,重新定义这一问题的解法。 这套升级最…...
【12】RUST智能指针
文章目录 智能指针Box<T>Rc<T>Weak<T>方法 Arc<T>RefCell<T>方法Ref<T>和RefMut<T> 常见使用方式 智能指针 Box<T> 数据存储在堆上只能有一个所有者 Rc<T> 单线程,引用计数不可变需要主要避免循环引用 …...
机器学习——ROC曲线、PR曲线
一、ROC曲线简介 1.1 ROC曲线的构成 1.横轴(假正率,FPR): 表示负样本被错误分类为正的比例(越小越好) 2.纵轴(真正率,TPR,即召回率): 表示正样…...
Unity AssetBundle依赖树可视化分析工具开发指南
一、需求分析与技术选型 1.1 需求背景 在Unity项目开发中,AssetBundle依赖关系管理是性能优化的关键。当项目资源量达到GB级别时,依赖树深度可能超过10层,容易导致: 资源重复打包(平均冗余率可达15%-30%)…...
WebStorm中使用live-server插件
文章目录 1. 前提条件1.1 已安装Node1.1.1 淘宝的镜像1.2 安装live-server1.3 安装WebStorm2. Windows配置hosts3. WebStorm配置live-server3.1 WebStorm创建3.2 启动 live-server1. 前提条件 1.1 已安装Node Windows PowerShell 版权所有(C) Microsoft Corporation。保留所…...
RTP Payload Format for H.264 Vide(1)
摘要:: 本备忘录描述了一种用于 ITU-T H.264 视频编码标准(与 ISO/IEC 国际标准 14496-10 技术上相同)的 RTP 负载格式,但不包括可伸缩视频编码(SVC)扩展和多视角视频编码(MVC&#…...
我为女儿开发了一个游戏网站
大家好,我是星河。 自从协助妻子为女儿开发了算数射击游戏后,星河就一直有个想法:为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣,但缺乏难度分级,无法根据女儿的学习进度灵活调整。而且,仅仅…...
【Spring Cloud Netflix】GateWay服务网关
1.基本概述 GateWay用于在微服务架构中提供统一的入口点,对请求进行路由,过滤和处理。它就像是整个微服务系统的大门,所有外部请求都要通过它才能访问到后端的各个微服务。 2.核心概念 2.1路由(Route) 路由是Spring Cloud gateWay中最基本…...
Docker部署Jenkins服务
文章目录 1.下载Jenkins服务2.部署Java21(可选)2.1 安装Java21 3.Maven3.9.9安装4.启动Jenkins5.初始化Jenkins5.1 入门5.2 安装推荐的插件5.3 创建第一个管理员用户5.4 实例配置5.5 Jenkins已就绪5.6 开始使用Jenkins5.7 重启Jenkins 6.配置Jenkins6.1 …...
[ctfshow web入门] web40
信息收集 怎么一下子多这么多过滤啊,我以为跳过了好几题 这又能eval了,但是连$也不能用了 不能用. * ?,所以打不出fla*或者fla?????了 不能用/,构造不出日志注入和伪协议包含 仔细观察,禁的是中文的括号&#x…...
蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)
蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数,得到了一个数字序列: S12345…...
UE5 Windows游戏窗口置顶
参考资料:UE5 UE4 项目设置全局置顶_ue4运行设置置顶-CSDN博客 修改完build.cs后,关掉重新生成解决方案。(不然可能编译报错,在这卡了半个小时) 不知道怎么用C的,可以用这个 Topmost - Keep Editor/Game w…...
Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼
1. 问题 使用Qt进行研发时,遇到一个问题,当在系统默认输入法中文(英文输入法或者搜狗就不会触发闪退)的情况下,选中QTableWidget控件(QTableWidgetItem有焦点,但是不双击)ÿ…...
力扣热题100刷题day62|283.移动零、39.组合总和、94.二叉树的中序遍历
1.283.移动零——双指针 快慢两个指针,慢指针指向新数组,快指针遍历旧数组,寻找非0元素,找到后,交换快慢指针所指向元素; 因为快指针已经遍历过,所以交换前慢指针处的元素都是0; …...
