Commit Graph

295 Commits

Author SHA1 Message Date
严浩
da515f4dfc feat: 添加卫星管理功能,新增 SatelliteOptions 接口,更新相关组件以支持卫星实体的添加和移除 2025-04-01 18:00:25 +08:00
严浩
21660cd9fa fix: 整理代码 2025-04-01 16:34:05 +08:00
严浩
99b5aeb042 feat: 重构地面站管理逻辑,新增 GroundStationState 接口,优化组件间数据传递 2025-04-01 16:20:22 +08:00
严浩
5c92482122 fix: 修正移除站点逻辑,确保从选中项中正确移除已删除的站点 2025-04-01 14:32:32 +08:00
严浩
8f2a77702b feat: InspiraUI 2025-04-01 11:55:16 +08:00
严浩
db2c210a09 fix: message.not-used [no ci] 2025-04-01 09:23:16 +08:00
严浩
7072f171e0 refactor: 重构 Cesium 相关代码 2025-04-01 01:51:02 +08:00
严浩
2c6a4287d2 feat: 整理 HCesiumViewerCls 相关 2025-03-31 20:43:13 +08:00
严浩
4636f9fde4 feat: 添加 Cesium Viewer 组件及相关功能,优化项目结构和配置 2025-03-31 19:43:56 +08:00
严浩
12d5ee979f feat: 优化响应式布局,使用 CSS 支持的单位调整屏幕高度和宽度 2025-03-31 15:30:45 +08:00
严浩
3edb7392ce feat: 全局 FluidCursor 2025-03-31 15:25:40 +08:00
严浩
b16c038be9 feat: 删除 OrbPro 相关文件和依赖,清理代码库 2025-03-31 15:15:54 +08:00
严浩
aea90d1f0d feat: 优化首页模板,移除不必要的条件渲染,调整样式以适应全屏 2025-03-31 14:47:13 +08:00
严浩
334b2485f5 feat: 添加 InspiraUI 组件和模式背景功能,更新依赖项 2025-03-31 14:11:30 +08:00
mini2024
0cc1730b2c feat: 更新依赖 2025-03-31 00:38:50 +08:00
mini2024
8d0ed93ee0 feat: 添加 InspiraUI 组件 2025-03-30 23:45:01 +08:00
mini2024
05d6a71da8 feat: <Isolate /> 2025-03-30 22:58:32 +08:00
mini2024
0cf585be90 手动修复 2025-03-28 00:43:59 +08:00
mini2024
ba91e845d5 帮我把 @unhead/vue 的版本升级到 v2.0.2
---
title: Migrate Your TypeScript App To Unhead v2
description: Learn about how to migrate to TypeScript Unhead v2 from v1.
navigation:
  title: Upgrade Guide
---

## Introduction

With the release of Unhead v2, we now have first-class support for other frameworks. However, this guide will focus on
the changes that affec TypeScript users.

The high-level of Unhead v2 was to remove deprecations and remove the implicit context implementation.

### Legacy Support

Unhead v2 is mostly fully backwards compatible with Unhead v1.

While not recommended, if upgrading is not possible for you, you can change your imports to the following:

```diff [TypeScript]
-import { createServerHead, useHead } from 'unhead'
+import { createServerHead, useHead } from 'unhead/legacy'
```

This will be removed in a future minor version, so you should lock your dependencies to the version that works for you.

## Client / Server Subpath Exports

🚦 Impact Level: Critical

**⚠️ Breaking Changes:**

- `createServerHead()`{lang="ts"} and `createHead()`{lang="ts"} exports from `unhead` are removed

The path where you import `createHead` from has been updated to be a subpath export.

Please follow the updated installation instructions or simply update the import to use the subpath.

**Client bundle:**

```diff
-import { createServerHead } from 'unhead'
+import { createHead } from 'unhead/client'

// avoids bundling server plugins
createHead()
```

**Server bundle:**

```diff
-import { createServerHead } from 'unhead'
+import { createHead } from 'unhead/server'

// avoids bundling server plugins
-createServerHead()
+createHead()
```

## Removed Implicit Context

🚦 Impact Level: Critical

**⚠️ Breaking Changes:**

- `getActiveHead()`{lang="ts"}, `activeHead`{lang="ts"} exports are removed

The implicit context implementation kept a global instance of Unhead available so that you could use the `useHead()`{lang="ts"} composables
anywhere in your application.

```ts
useHead({
  title: 'This just worked!'
})
```

While safe client side, this was a leaky abstraction server side and led to memory leaks in some cases.

In v2, the core composables no longer have access to the Unhead instance. Instead, you must pass the Unhead instance to the composables.

::note
Passing the instance is only relevant if you're importing from `unhead`. In JavaScript frameworks we tie the context to the framework itself so you
don't need to worry about this.
::

::code-group

```ts [TypeScript v2]
import { useHead } from 'unhead'

// example of getting the instance
const unheadInstance = useMyApp().unhead
useHead(unheadInstance, {
  title: 'Looks good'
})
```

```ts [TypeScript v1]
import { useHead } from 'unhead'

useHead({
  title: 'Just worked! But with SSR issues'
})
```

::

## Removed `vmid`, `hid`, `children`, `body`

🚦 Impact Level: High

For legacy support with Vue Meta we allowed end users to provide deprecated properties:  `vmid`, `hid`, `children` and `body`.

You must either update these properties to the appropriate replacement, remove them, or you can use the `DeprecationsPlugin`.

**Meta tags with `vmid`, `hid`**

These are already deduped magically so you can safely remove them there.

```diff
useHead({
  meta: [{
    name: 'description',
-   vmid: 'description'
-   hid: 'description'
  }]
})
```

**Other Tags with `vmid`, `hid`**

Use `key` if you need the deduplication feature. This is useful for tags that may change from server to client
rendering.

```diff
useHead({
  script: [{
-   vmid: 'my-key'
-   hid: 'my-key'
+   key: 'my-key',
  }]
})
```

**Using `children`**

The `children` key is a direct replacement of `innerHTML` which you should use instead.

::Caution
When migrating your code ensure that you're not dynamically setting `innerHTML` as this can lead to XSS vulnerabilities.
::

```diff
useHead({
  script: [
      {
-        children: '..'
+        innerHTML: '..'
      }
   ]
})
```

**Using `body`**

The `body` key should be updated to use the Tag Position feature.

```diff
useHead({
  script: [
      {
-        body: true
+        tagPosition: 'bodyClose'
      }
   ]
})
```

**Use Deprecations Plugin**

```ts
import { createHead } from 'unhead'
import { DeprecationsPlugin } from 'unhead/plugins'

const unhead = createHead({
  plugins: [DeprecationsPlugin]
})
```

## Opt-in Template Params & Tag Alias Sorting

🚦 Impact Level: High

To reduce the bundle size and improve performance, we've moved the template params and tag alias sorting to optional plugins.

If you'd like to continue using these, please opt-in to the plugins.

```ts
import { AliasSortingPlugin, TemplateParamsPlugin } from 'unhead/plugins'

createHead({
  plugins: [TemplateParamsPlugin, AliasSortingPlugin]
})
```

## Vue 2 Support

🚦 Impact Level: Critical

Unhead v2 no longer supports Vue v2. If you're using Vue v2, you will need to lock your dependencies to the latest v1 version of Unhead.

## Promise Input Support

🚦 Impact Level: Medium

If you have promises as input they will no longer be resolved, either await the promise before passing it along or register the optional promises plugin.

**Option 1: Await Promise**

```diff
useHead({
  link: [
    {
-     href: import('~/assets/MyFont.css?url'),
+     href: await import('~/assets/MyFont.css?url'),
      rel: 'stylesheet',
      type: 'text/css'
    }
  ]
})
```

**Option 2: Promise Plugin**

```ts
import { PromisePlugin } from 'unhead/plugins'

const unhead = createHead({
  plugins: [PromisePlugin]
})
```

## Updated `useScript()`{lang="ts"}

🚦 Impact Level: High

**⚠️ Breaking Changes:**

- Script instance is no longer augmented as a proxy and promise
- `script.proxy`{lang="ts"} is rewritten for simpler, more stable behavior
- `stub()`{lang="ts"} and runtime hook `script:instance-fn` are removed

**Replacing promise usage**

If you're using the script as a promise you should instead opt to use the `onLoaded()` functions.

```diff
const script = useScript()

-script.then(() => console.log('loaded')
+script.onLoaded(() => console.log('loaded'))
```

**Replacing proxy usage**

If you're accessing the underlying API directly from the script instance, you will now need to only access it from the `.proxy`.

```diff
const script = useScript('..', {
  use() { return { foo: [] } }
})

-script.foo.push('bar')
+script.proxy.foo.push('bar')
```

**Replacing `stub()`**

If you were using stub for anything you should replace this with either custom `use()` behavior.

```diff
const script = useScript('...', {
-  stub() { return { foo: import.meta.server ? [] : undefined } }
})

+script.proxy = {} // your own implementation
```

## Tag Sorting Updated

🚦 Impact Level: :UBadge{color="success" variant="subtle" size="sm" label="Low"}

An optional [Capo.js](https://rviscomi.github.io/capo.js/) plugin was added to Unhead, in v2 we make this the default sorting behavior.

::warning
As all head tags may be re-ordered this will break any snapshot tests that you have in place and in some rare cases may lead to performance regressions.
::

You can opt-out of Capo.js sorting by providing the option.

```ts
createHead({
  disableCapoSorting: true,
})
```

## Default SSR Tags

🚦 Impact Level: Low

When SSR Unhead will now insert important default tags for you:
- `<meta charset="utf-8">`
- `<meta name="viewport" content="width=device-width, initial-scale=1">`
- `<html lang="en">`

If you were previously relying on these being left empty, you may need to either disable them by using `disableDefaultTags` or insert tags
to override them.

```ts
import { createHead, useHead } from 'unhead/server'

// disable when creating the head instance
const head = createHead({
  disableDefaults: true,
})

useHead(head, {
  htmlAttrs: {
    lang: 'fr'
  }
})
```

## CJS Exports Removed

🚦 Impact Level: Low

CommonJS exports have been removed in favor of ESM only.

```diff
-const { createHead } = require('unhead/client')
+import { createHead } from 'unhead/client'
```

## Deprecated `@unhead/schema`

🚦 Impact Level: Low

The `@unhead/schema` package is now deprecated and will be removed in a future version. You should instead import
the schema from `unhead/types` or `unhead`.

```diff
-import { HeadTag } from '@unhead/schema'
+import { HeadTag } from 'unhead/types'
```
2025-03-28 00:06:28 +08:00
严浩
dcbdba3a55 docs: 添加 Vuetify 相关链接到 UseIntersectionObserverInfiniteLoading 组件 2025-03-27 11:24:16 +08:00
严浩
2df09cf33f feat: 整理目录结构 2025-03-25 10:36:19 +08:00
mini2024
2482608a2e feat: 添加 FlowbiteSidebar 组件及路由定义 2025-03-25 01:03:03 +08:00
mini2024
295f2d0c95 feat: 添加主题配置支持并优化 UI 组件页面的暗黑模式样式 2025-03-24 01:19:00 +08:00
mini2024
cf95ef7e8e feat: 添加输入组件并更新 UI 组件页面布局 2025-03-24 00:54:43 +08:00
mini2024
22d3eedea0 feat: UIComponentsComponents 2025-03-24 00:22:24 +08:00
mini2024
e42241ddc5 feat: unocss-preset-shadcn 2025-03-23 22:10:38 +08:00
mini2024
974f05719e feat: 添加 StyleLayer 组件,展示 @layer 优先级规则及样式示例;新增 style.page.vue 页面 2025-03-22 18:29:23 +08:00
严浩
c66070a30f feat: 更新 cesium-helper 的 README.md,优化链接和格式
[skip ci]
2025-03-17 10:51:30 +08:00
mini2024
eafe01fcb3 feat: 更新 cesium-helper 的 README.md,添加 vue-vite-cesium-demo 链接
[skip ci]
2025-03-16 17:36:59 +08:00
mini2024
74631308f6 feat: 更新 cesium-helper 的 README.md,添加新的链接
[skip ci]
2025-03-16 17:24:56 +08:00
严浩
29c9eee458 feat: 更新 README.md,添加卫星相关链接 2025-03-14 17:58:09 +08:00
严浩
f7137cb6e5 feat: 更新工具提示,添加 REV_AT_EPOCH 的校验和说明 2025-03-14 15:28:56 +08:00
严浩
9f0bed4513 demo_03_卫星加站点 2025-03-14 14:42:06 +08:00
严浩
31909c906d feat: 添加 eslint-plugin-unicorn 依赖,更新 ESLint 配置以支持新规则 2025-03-14 12:50:54 +08:00
严浩
e528005e7c docs: 更新 README 文件,修改项目配置和 TLE 数据链接 2025-03-13 16:52:03 +08:00
严浩
7d98cb0074 feat: 添加卫星数量动态选择按钮,优化布局和交互 2025-03-12 19:15:46 +08:00
严浩
091b3d1e29 feat: 添加卫星数据加载按钮,优化初始加载逻辑 2025-03-12 19:12:40 +08:00
严浩
8b702826b3 feat: 更新 TLE 数据处理和示例,完善卫星轨道参数解析逻辑 2025-03-12 19:02:11 +08:00
严浩
447907aa7c feat: 优化卫星页面加载和状态管理,引入加载动画和响应式数据处理 2025-03-12 18:33:26 +08:00
严浩
38f35328b3 refactor: 重构卫星选择器组件,优化布局和交互细节 2025-03-12 14:34:20 +08:00
严浩
4fba5091be fix: 修复卫星名称提取逻辑,增强类型安全性 2025-03-12 14:32:16 +08:00
严浩
92d795ba88 refactor: 重构卫星选择器为独立组件,优化代码结构和性能 2025-03-12 14:29:38 +08:00
严浩
ff46fdd637 feat: 优化卫星选择器标题显示,增强用户交互体验 2025-03-12 14:06:19 +08:00
严浩
ab38d2a3f6 feat: 优化卫星选择器并完善 Cesium 页面交互 2025-03-12 12:12:41 +08:00
严浩
203ab3da7d feat: 优化卫星实体类,更新 TLE 处理逻辑并增强类型定义 2025-03-11 18:21:40 +08:00
严浩
a2f07c7d76 feat: 添加卫星实体类及相关功能,优化 Cesium 初始化和时间线设置 2025-03-11 16:01:55 +08:00
严浩
4542944f52 整理 2025-03-10 13:15:38 +08:00
严浩
a7b10809c1 feat: 添加假 API 接口以获取用户信息,并更新 Cesium 示例代码 2025-03-10 12:00:45 +08:00
严浩
ca1521328c chore: 更新 setup-node-environment 版本并添加静态代码分析工作流 2025-03-10 11:02:45 +08:00
mini2024
8733c3e42e chore(deps): 升级 oxlint 2025-03-09 23:30:29 +08:00