常见问题 FAQ
基础问题
Q: Lyt.js 和 Vue.js 有什么区别?
A:
- 零依赖: Lyt.js 完全不依赖第三方库,包括响应式系统、编译器、渲染器等全部自研
- 超小体积: gzip 后仅 34.56KB,远小于 Vue
- Vapor Mode: 无虚拟 DOM 模式,性能接近原生
- Islands Architecture: SSR 局部注水架构
- 学习曲线: 更贴近原生 HTML,API 更简洁
Q: Lyt.js 适合生产环境吗?
A: Lyt.js 已经具备生产级框架的基础:
- ✅ 完整的测试套件(2436+ 测试,100% 通过)
- ✅ 完整的核心功能
- ✅ 稳定的 API
- ✅ 完善的工具链
但需要注意:
- ⚠️ 生态系统还在发展中
- ⚠️ 社区相对较小
- ⚠️ 缺少大型生产项目验证
Q: Lyt.js 的浏览器兼容性如何?
A:
- 现代浏览器:Chrome 60+, Firefox 55+, Safari 12+, Edge 79+
- 需要支持:Proxy, Reflect, Promise, Map, Set
- IE 不支持
开发问题
Q: 如何从 Vue 3 迁移到 Lyt.js?
A: 参考 迁移指南,主要变化:
typescript
// Vue 3
import { ref, reactive } from 'vue'
// Lyt.js
import { ref, reactive } from '@lytjs/reactivity'Q: 如何解决"找不到模块"错误?
A:
- 确保安装了依赖:
npm install - 检查导入路径:使用正确的包名
@lytjs/core - TypeScript 项目:检查
tsconfig.json中的paths配置
Q: 组件不更新怎么办?
A: 检查以下几点:
- 确保使用了响应式数据(ref/reactive)
- 避免直接替换整个响应式对象
- 使用
shallowRef时注意更新方式 - 检查 Key 是否正确设置
typescript
// ❌ 错误
let data = reactive({ count: 0 })
data = { count: 1 } // 替换了整个对象,丢失响应式
// ✅ 正确
const data = reactive({ count: 0 })
data.count = 1 // 直接修改属性Q: 如何调试 Lyt.js 应用?
A:
- 使用内置 DevTools:
typescript
import { createDevTools } from '@lytjs/devtools'
app.use(createDevTools())- 使用浏览器 DevTools 的调试功能
- 查看控制台错误信息
性能问题
Q: 应用运行缓慢怎么办?
A: 参考 性能优化指南,检查:
- 是否启用了 Vapor Mode
- 是否有不必要的深层响应式
- 列表是否设置了正确的 Key
- 是否有大量 DOM 操作
- 使用 DevTools 分析性能瓶颈
Q: 首屏加载慢怎么优化?
A:
- 启用代码分割和懒加载
- 使用 Vapor Mode
- 预编译模板
- 配置 CDN 和缓存
- 使用 SSR/SSG
Q: 内存占用高怎么办?
A:
- 使用
shallowRef/shallowReactive - 及时清理事件监听器
- 使用
KeepAlive时注意缓存策略 - 避免不必要的响应式追踪
- 使用
markRaw标记静态数据
路由问题
Q: History 模式刷新 404 怎么办?
A: 需要配置服务器支持 SPA 回退:
nginx
location / {
try_files $uri $uri/ /index.html;
}Q: 如何实现路由守卫?
A:
typescript
const router = createRouter({
routes
})
router.beforeEach((to, from, next) => {
// 检查权限
if (to.meta.requiresAuth && !isLoggedIn()) {
next('/login')
} else {
next()
}
})状态管理问题
Q: Store 数据持久化怎么做?
A:
typescript
import { defineStore } from '@lytjs/store'
export const useStore = defineStore('main', {
state: () => ({
count: 0
}),
persist: {
enabled: true,
storage: localStorage,
key: 'my-store'
}
})Q: 多个组件间如何共享状态?
A:
- 使用 Store(推荐)
- 使用 Props 和 Events
- 使用 Provide/Inject
构建问题
Q: 构建失败怎么办?
A:
- 检查 Node.js 版本(建议 16+)
- 清除缓存:
rm -rf node_modules package-lock.json && npm install - 检查 TypeScript 错误
- 查看构建日志
Q: 如何减小构建体积?
A:
- 启用 Tree Shaking
- 使用代码分割
- 移除未使用的导入
- 启用压缩
- 使用 Vapor Mode
SSR 问题
Q: SSR 时 window 未定义怎么办?
A: 使用客户端检查:
typescript
const isClient = typeof window !== 'undefined'
if (isClient) {
// 客户端代码
}Q: 如何处理 SSR 数据预取?
A:
typescript
export default {
async onServerPrefetch() {
const data = await fetchData()
return data
},
setup() {
const data = ref(null)
onMounted(async () => {
data.value = await fetchData()
})
return { data }
}
}生态问题
Q: 有 UI 组件库吗?
A: 有基础组件库 @lytjs/components,包含常用组件:
- Button
- Input
- Select
- Modal
- Table
- 等等
Q: 如何与第三方库集成?
A: 大多数第三方库都可以直接使用:
typescript
import axios from 'axios'
import dayjs from 'dayjs'
const response = await axios.get('/api/data')贡献问题
Q: 如何为 Lyt.js 做贡献?
A:
- 查看 贡献指南
- 提交 Issue 报告问题
- 提交 Pull Request 改进代码
- 改进文档
- 分享使用经验
Q: 如何报告 Bug?
A:
- 在 Gitee 仓库提交 Issue
- 提供复现步骤
- 提供最小复现代码
- 说明预期行为和实际行为
未来计划
Q: Lyt.js 的发展路线是什么?
A: 参考 路线图,主要计划:
- 完善生态系统
- 更多官方插件
- 开发工具改进
- 性能优化
- 文档完善
Q: 会有 TypeScript 优先支持吗?
A: 是的,Lyt.js 完全使用 TypeScript 开发,提供完整的类型定义。
更多资源
还有其他问题?欢迎在 Gitee 仓库提交 Issue!