# svelte-vite
**Repository Path**: yuppie_luck/svelte-vite
## Basic Information
- **Project Name**: svelte-vite
- **Description**: svelte项目框架包含了路由:svelte-spa-router
样式:less tailwind
国际化:svelte-i18n
接口请求:axios
环境变量配置:.env
组件库:melt-ui
图标库:iconfont
轮播图:swiper
node:20.18.1 npm 10.8.2
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-04-07
- **Last Updated**: 2025-10-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
> **框架太“重”了**:通常一个小型项目只由少数几个简单页面构成,如果使用 Vue 或者 React 这些框架来研发的话,有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等),这些代码对于小型项目而言是冗余的,它们影响了包体大小,进而影响页面的启动速度和执行性能。
> **打包太慢了**:以 Vue CLI 为例,它的底层基于 Webpack,虽然 Webpack 具备更强大的功能和灵活性,但相比于 Vite、Esbuild 这些以速度为标杆的构建工具来说,它的速度确实慢了一些,影响了研发效率。
@[toc]
## 一、 创建基本项目
### 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.
Vanilla
Vue
React
Preact
Lit
❯ Svelte
Solid
Qwik
Others
? Select a variant: › - Use arrow-keys. Return to submit.
TypeScript
❯ JavaScript
SvelteKit
```
**基本项目创建完成**
## 二、目录结构
根据上一步创建项目,项目的基本结构栓是完成了,但这样还是不够的,接下来介绍一下完整的项目目录

## 三、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在内的捆绑器进行了测试
1. 要使用动态导入的组件,您需要利用包装方法(根据路线包装文档,该方法可用于各种操作)。首先,导入wrap方法:
```
import {wrap} from 'svelte-spa-router/wrap'
```
2. 然后,在路由定义中,使用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 在页面之间导航
1. 锚点导航
```
Thus Spoke Zarathustra
```
2. use:link导航(可以使用use:link操作,而不必在每个链接前键入#)
```
The Little Prince
```
### 3.3 使用路由
在app.svelte中全局调用
```
import Router from 'svelte-spa-router'
```
然后,通过将组件放置在标记中,将路由器显示在您想要的任何位置
```
```
## 四、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` 中。
```bash
npm install svelte-i18n
```
### 6.2 初始化 `svelte-i18n`
在你的 Svelte 项目中,通常会在 `src` 目录下创建一个 `i18n.js` 或 `i18n.ts` 文件来初始化 `svelte-i18n`。
```javascript
// 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`。
```json
// src/locales/en.json
{
"welcome": "Welcome to Svelte App",
"greeting": "Hello, {name}!"
}
```
```json
// src/locales/zh.json
{
"welcome": "欢迎使用 Svelte 应用",
"greeting": "你好, {name}!"
}
```
### 6.4 在 Svelte 组件中使用 `svelte-i18n`
你可以在 Svelte 组件中使用 `$t` 函数来获取翻译内容。
```svelte
{$t('welcome')}
{$t('greeting', { name: 'John' })}
```
### 6.5 切换语言
你可以通过 `locale.set` 方法来动态切换语言。
```svelte
```
### 6.6 在 `App.svelte` 中引入 `i18n.js`
1. 确保在 `App.svelte` 或你的主入口文件中引入 `i18n.js`。
```svelte
```
2. 确保加载完i18n后在加载页面
```App.svelte
{#if $locale}
{/if}
```
### 6.7 运行项目
使用 `npm run dev` 运行你的项目,你应该能够看到国际化内容并根据按钮切换语言。
### 6.8 构建项目
当你准备好发布项目时,使用 `npm run build` 来构建项目。
```bash
npm run build
```
### 6.9 预览项目
使用 `npm run preview` 来预览构建后的项目。
```bash
npm run preview
```
### 6.10 检查项目
使用 `npm run check` 来检查 Svelte 和 TypeScript 的类型。
```bash
npm run check
```
通过以上步骤,你应该能够在 Svelte 项目中成功使用 `svelte-i18n` 来实现国际化功能。
## 七、svelte接口请求
在 Svelte 项目中使用 `axios` 进行 HTTP 请求是非常常见的操作。以下是如何在 Svelte 项目中集成和使用 `axios` 的步骤:
### 7.1 安装 `axios`
首先,确保你已经安装了 `axios`。根据你的 `package.json` 文件,它已经存在于 `dependencies` 中。
```bash
npm install axios
```
### 7.2 创建 `axios` 实例
为了更好的管理和配置 `axios`,通常会在 `src/utils` 目录下创建一个 `api.ts` 或 `api.js` 文件来创建 `axios` 实例。
```typescript
// src/utils/api.ts
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.example.com', // 你的 API 基础 URL
timeout: 10000, // 请求超时时间
headers: {
'Content-Type': 'application/json',
},
});
export default api;
```
### 7.3 在 Svelte 组件中使用 `axios`
你可以在 Svelte 组件中导入并使用 `axios` 实例来发送 HTTP 请求。
```svelte
{#if data}
{data.title}
{data.description}
{/if}
```
### 7.4 处理请求和响应拦截器
你可以在 `axios` 实例中添加请求和响应拦截器,以便在请求发送前或响应到达后进行一些处理。
```typescript
// 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) => {
// 在请求发送之前做一些处理,例如添加 token
const 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 操作。
```svelte
{#if userData}
Welcome, {userData.name}!
Email: {userData.email}
{/if}
```
### 7.6 处理错误
在使用 `axios` 时,确保你处理了可能的错误,例如网络错误或服务器错误。
```svelte
{#if userData}
Welcome, {userData.name}!
Email: {userData.email}
{:else if errorMessage}
{errorMessage}
{/if}
```
通过以上步骤,你应该能够在 Svelte 项目中成功使用 `axios` 来进行 HTTP 请求。
## 八、svelte组件库
这里用的是melt-ui,访问地址是:https://www.melt-ui.com/docs/introduction
一键配置
```
npx @melt-ui/cli@latest init
```
## 九、svelte阿里图标库
在 Svelte 项目中使用阿里图标(如 [iconfont](https://www.iconfont.cn/))可以通过以下步骤实现:
---
### 9.1 获取阿里图标
1. 访问 [iconfont](https://www.iconfont.cn/) 并登录。
2. 创建一个项目,将需要的图标添加到项目中。
3. 选择 `Font class` 或 `Symbol` 方式生成代码。
4. 点击 `下载至本地`,解压后得到图标文件。
---
### 9.2 将图标文件放入项目
将下载的图标文件(如 `iconfont.css` 和字体文件)放入项目的 `public` 或 `src/assets` 目录中。
例如:
```
public/
iconfont/
iconfont.css
iconfont.ttf
iconfont.woff
iconfont.woff2
```
---
### 9.3 引入图标文件
在 `App.svelte` 或 `main.ts` 中引入 `iconfont.css` 文件。
```svelte
```
---
### 9.4 使用图标
在 Svelte 组件中使用阿里图标,直接通过 `class` 引用图标类名。
```svelte
```
---
### 9.5 动态切换图标
如果需要动态切换图标,可以将图标类名绑定到变量。
```svelte
```
---
### 9.6 使用 Symbol 方式(可选)
如果选择 `Symbol` 方式,需要引入 `iconfont.js` 文件,并使用 `