NativeScript与Vue和TypeScript的完美融合:开发者基础模板详解
NativeScriptVueTypeScript示例项目 ### 摘要
本项目作为一款结合了NativeScript、Vue与TypeScript的示例项目,旨在为开发者提供一个高效的基础模板。通过这一模板,开发者可以迅速上手,利用这些强大的工具和技术栈来构建高质量的移动应用。
### 关键词
NativeScript, Vue, TypeScript, 示例项目, 移动应用开发
## 一、NativeScript与Vue结合的概述
### 1.1 NativeScript简介
NativeScript 是一个开源框架,它允许开发者使用 JavaScript、TypeScript 或 Angular 来构建原生的移动应用程序。NativeScript 的一大特色在于它能直接访问设备的原生 API,这意味着开发者可以充分利用 iOS 和 Android 平台的所有功能,而无需依赖于 WebView 或其他中间层技术。此外,NativeScript 支持使用 CSS 和原生样式来定制应用界面,使得开发者能够创建出既美观又高效的用户界面。
### 1.2 Vue.js的核心优势
Vue.js 是一种用于构建用户界面的渐进式框架。它以其简单易用、灵活性高以及强大的生态系统而闻名。Vue.js 的核心优势包括:
- **易于上手**:Vue.js 的学习曲线相对平缓,即使是初学者也能快速掌握其基本概念并开始开发。
- **组件化**:Vue.js 强调组件化的开发模式,这有助于代码的复用和维护。
- **响应式系统**:Vue.js 内置了一套响应式系统,能够自动追踪数据变化并更新视图,极大地简化了状态管理。
- **广泛的插件生态**:Vue.js 社区提供了丰富的插件和工具,涵盖了路由管理、状态管理等多个方面,满足不同场景的需求。
### 1.3 两者的融合优势
将 NativeScript 与 Vue.js 结合使用,可以充分发挥两者的优势,为开发者带来诸多便利:
- **跨平台开发**:利用 NativeScript 和 Vue.js,开发者可以编写一次代码,同时部署到 iOS 和 Android 平台,大大提高了开发效率。
- **高性能表现**:由于 NativeScript 能够直接访问原生 API,因此基于该框架的应用程序通常具有接近原生应用的性能表现。
- **丰富的 UI 组件库**:Vue.js 拥有庞大的社区支持,这意味着开发者可以轻松找到各种 UI 组件库,进一步加快开发进度。
- **TypeScript 支持**:通过集成 TypeScript,开发者可以在开发过程中获得类型检查的好处,减少运行时错误,提高代码质量。
- **灵活的架构选择**:Vue.js 的灵活性意味着开发者可以根据项目的具体需求选择合适的架构模式,无论是单页面应用还是传统的多页面应用都能得到良好的支持。
## 二、TypeScript在项目中的应用
### 2.1 TypeScript的优势
TypeScript 是一种由微软开发的开源、强类型的编程语言,它是 JavaScript 的超集,这意味着任何合法的 JavaScript 代码也是合法的 TypeScript 代码。TypeScript 的主要优势包括:
- **类型安全**:TypeScript 提供了静态类型检查,可以在编译阶段发现潜在的类型错误,避免运行时出现错误。
- **接口和类型定义**:TypeScript 允许开发者定义接口和类型,这有助于确保对象的结构正确无误,同时也方便了团队协作和代码重用。
- **工具支持**:TypeScript 拥有丰富的工具链支持,包括 IDE 集成、Linters 和构建工具等,这些工具可以帮助开发者更高效地编写和维护代码。
- **大型项目管理**:对于大型项目而言,TypeScript 的类型系统可以显著提高代码质量和可维护性,减少 bug 的发生概率。
- **社区支持**:随着 TypeScript 在前端开发领域的普及,越来越多的库和框架开始提供 TypeScript 定义文件,这使得开发者可以更加方便地使用这些库和框架。
### 2.2 TypeScript与Vue的整合方法
为了将 TypeScript 与 Vue.js 整合起来,开发者需要遵循以下几个步骤:
1. **安装 TypeScript**:首先需要安装 TypeScript 本身及其相关的 Vue 类型定义文件。可以通过 npm 或 yarn 进行安装。
```bash
npm install typescript @types/vue --save-dev
```
2. **配置 TypeScript**:接下来需要配置 TypeScript 的 `tsconfig.json` 文件,以确保 TypeScript 可以正确地编译 Vue 文件。
```json
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"jsx": "preserve",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"allowJs": true
},
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"],
"exclude": ["node_modules"]
}
```
3. **编写 TypeScript 代码**:在 Vue 文件中使用 `.vue` 扩展名,并在 `<script>` 标签中指定 `lang="ts"`,即可开始使用 TypeScript 编写 Vue 组件。
```html
<template>
<div>{{ message }}</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
data() {
return {
message: 'Hello Vue & TypeScript!'
};
}
});
</script>
```
4. **构建和打包**:最后,使用构建工具(如 Webpack)将 TypeScript 代码编译为 JavaScript,并打包成最终的应用程序。
### 2.3 TypeScript在NativeScript项目中的实践
在 NativeScript 项目中引入 TypeScript,不仅可以提升代码的质量和可维护性,还能充分利用 NativeScript 的原生 API 访问能力。以下是 TypeScript 在 NativeScript 项目中的几个实践要点:
1. **定义类型**:为 NativeScript 的组件和 API 定义类型,确保代码的类型安全。
2. **使用装饰器**:利用 TypeScript 的装饰器特性来增强组件的功能,例如添加生命周期钩子或属性验证。
3. **模块化设计**:采用模块化的设计思路,将应用分解为多个小的、可重用的模块,每个模块都有明确的职责和接口定义。
4. **代码重构**:利用 TypeScript 的类型系统进行代码重构,提高代码的可读性和可维护性。
5. **测试驱动开发**:结合 TypeScript 的类型检查功能,实施测试驱动开发策略,确保应用的稳定性和可靠性。
通过上述步骤,开发者可以充分利用 TypeScript 的优势,在 NativeScript 项目中构建高质量的移动应用。
## 三、项目结构解析
### 3.1 项目目录结构详解
在本示例项目中,采用了清晰且易于理解的目录结构,以帮助开发者更好地组织和管理代码。以下是项目的主要目录结构及其说明:
- **`src`**:这是项目的核心目录,包含了所有源代码。
- **`app`**:存放应用程序的主要组件和资源。
- **`components`**:包含可重用的 Vue 组件。
- **`pages`**:组织各个页面或屏幕的 Vue 文件。
- **`services`**:封装了与后端交互的服务逻辑。
- **`store`**:如果使用 Vuex 管理状态,则存放相关文件。
- **`assets`**:存储静态资源,如图片、字体文件等。
- **`styles`**:存放全局样式表。
- **`typings`**:存放自定义的 TypeScript 类型定义文件。
- **`plugins`**:如果使用了特定的 NativeScript 插件,这里会包含相应的配置文件。
- **`tests`**:存放单元测试和集成测试文件。
- **`tsconfig.json`**:TypeScript 的配置文件。
- **`vue.config.js`**:Vue CLI 的配置文件。
- **`package.json`**:项目依赖和脚本配置文件。
这样的目录结构不仅有助于保持代码的整洁,还便于团队成员之间的协作。
### 3.2 关键文件与功能介绍
#### 3.2.1 `main.ts`
这是项目的入口文件,负责初始化 NativeScript 应用程序,并加载 Vue 实例。在这个文件中,开发者可以设置全局的配置选项,比如启用 Vue 的生产提示等。
#### 3.2.2 `App.vue`
这是应用程序的根组件,通常包含整个应用的基本布局和导航结构。在这里,开发者可以定义全局的样式和脚本,以及应用级别的事件监听器。
#### 3.2.3 `tsconfig.json`
TypeScript 的配置文件,用于指定编译选项和文件包含规则。例如,可以设置目标环境、模块解析方式等,确保 TypeScript 代码能够正确地编译为 JavaScript。
#### 3.2.4 `vue.config.js`
Vue CLI 的配置文件,用于自定义构建过程中的选项。例如,可以配置别名、修改Webpack配置等,以适应项目的特殊需求。
### 3.3 项目配置与优化
#### 3.3.1 TypeScript 配置优化
- **类型定义**:确保所有使用的 NativeScript 组件和 API 都有对应的类型定义文件,以实现更好的类型检查。
- **编译选项**:根据项目需求调整 `tsconfig.json` 中的编译选项,例如启用 `strict` 模式以获得更严格的类型检查。
#### 3.3.2 Vue CLI 配置优化
- **自定义Webpack配置**:通过 `vue.config.js` 文件自定义Webpack配置,例如添加额外的插件或修改默认的构建路径。
- **环境变量**:利用 Vue CLI 提供的环境变量功能,根据不同环境(如开发、测试、生产)动态调整配置。
#### 3.3.3 性能优化
- **懒加载**:对于大型应用,可以考虑使用 Vue Router 的懒加载功能,按需加载组件,减少初始加载时间。
- **代码分割**:利用 Webpack 的代码分割功能,将代码拆分成多个较小的包,进一步优化加载速度。
- **压缩与优化**:在生产环境中,使用压缩工具(如 Terser、UglifyJS)压缩 JavaScript 和 CSS 文件,减小程序包的大小。
通过以上配置和优化措施,可以显著提高应用的性能和用户体验,使开发者能够构建出既高效又稳定的移动应用。
## 四、开发环境搭建
### 4.1 环境需求与安装
在开始使用 NativeScript、Vue 与 TypeScript 构建移动应用之前,开发者需要确保满足一定的环境需求,并正确安装所需的工具和依赖项。以下是具体的步骤:
#### 环境需求
- **Node.js**:推荐使用 LTS 版本,确保 Node.js 的版本至少为 12.x 或更高。
- **npm 或 yarn**:用于安装项目依赖。
- **NativeScript CLI**:用于创建、构建和运行 NativeScript 项目。
- **Android Studio** 或 **Xcode**:用于构建和调试 Android 或 iOS 应用。
#### 安装步骤
1. **安装 Node.js**:访问 [Node.js 官方网站](https://nodejs.org/) 下载并安装适合操作系统的 LTS 版本。
2. **安装 NativeScript CLI**:打开命令行工具,执行以下命令:
```bash
npm install -g nativescript
```
3. **安装 Vue CLI**:Vue CLI 是用于构建 Vue.js 项目的官方工具,可通过以下命令安装:
```bash
npm install -g @vue/cli
```
4. **安装 TypeScript**:TypeScript 是本项目的关键组成部分,可以通过 npm 安装:
```bash
npm install -g typescript
```
5. **安装 Android Studio 或 Xcode**:根据目标平台的不同,选择安装 Android Studio 或 Xcode。这些 IDE 提供了必要的工具和模拟器来构建和调试移动应用。
#### 创建项目
使用 NativeScript CLI 创建一个新的项目,并指定使用 Vue 和 TypeScript:
```bash
tns create my-app --template nativescript-vue-typescript
cd my-app
```
通过以上步骤,开发者可以准备好开发环境,并创建一个基于 NativeScript、Vue 和 TypeScript 的新项目。
### 4.2 开发工具的选择与配置
为了高效地开发和维护项目,选择合适的开发工具至关重要。以下是一些建议的开发工具及其配置方法:
#### 开发工具选择
- **Visual Studio Code**:一款轻量级但功能强大的源代码编辑器,支持多种插件扩展,非常适合 TypeScript 和 Vue.js 的开发。
- **WebStorm**:JetBrains 提供的一款专为 JavaScript 开发设计的 IDE,内置了对 Vue 和 TypeScript 的良好支持。
#### 工具配置
1. **安装扩展**:在 Visual Studio Code 或 WebStorm 中安装必要的扩展,如:
- **Vetur**:提供 Vue.js 的语法高亮、智能感知等功能。
- **TypeScript and JavaScript (Microsoft)**:提供 TypeScript 的语法高亮、智能感知等功能。
- **Prettier**:用于代码格式化。
- **ESLint**:用于代码质量检查。
2. **配置 TypeScript**:确保 TypeScript 的配置文件 `tsconfig.json` 正确设置,以支持 Vue 文件的编译。
3. **配置 ESLint**:通过 `.eslintrc.js` 文件配置 ESLint 规则,确保代码符合最佳实践。
4. **配置 Prettier**:通过 `.prettierrc` 文件配置 Prettier 的代码格式化规则。
通过这些配置,开发者可以享受到更高效、更流畅的开发体验。
### 4.3 调试与测试方法
为了确保应用的质量和稳定性,有效的调试和测试方法是必不可少的。以下是一些推荐的方法:
#### 调试
- **使用 NativeScript CLI**:NativeScript CLI 提供了方便的调试工具,可以直接在模拟器或真机上运行应用,并使用 Chrome DevTools 进行调试。
- **使用 IDE 的调试功能**:Visual Studio Code 和 WebStorm 都提供了内置的调试工具,支持设置断点、查看变量值等功能。
#### 测试
- **单元测试**:使用 Jest 或 Mocha 等测试框架编写单元测试,确保各个组件和函数的正确性。
- **端到端测试**:使用 Detox 或 Appium 等工具进行端到端测试,模拟用户操作流程,确保应用的整体功能正常。
- **性能测试**:使用 Lighthouse 或 WebPageTest 等工具进行性能测试,评估应用的加载速度和响应时间。
通过综合运用这些调试和测试方法,开发者可以确保应用的质量,并及时发现和修复问题。
## 五、核心功能开发
### 5.1 用户界面设计与实现
在本示例项目中,用户界面的设计与实现充分利用了 NativeScript 和 Vue.js 的强大功能。通过结合两者的优点,开发者能够构建出既美观又高效的用户界面。
#### 设计原则
- **响应式布局**:利用 Vue.js 的响应式系统和 NativeScript 的原生布局特性,确保界面能够在不同尺寸和分辨率的设备上良好显示。
- **组件化开发**:采用 Vue.js 的组件化开发模式,将界面分解为多个可复用的组件,提高代码的可维护性和可读性。
- **统一的视觉风格**:遵循 Material Design 或 iOS Human Interface Guidelines 等设计指南,确保应用具有一致且专业的外观。
#### 实现细节
- **使用原生控件**:NativeScript 提供了大量的原生控件,如 `Label`, `Button`, `ListView` 等,这些控件可以直接在 Vue 文件中使用,实现原生级别的性能和外观。
- **自定义样式**:通过 CSS 和 NativeScript 的样式系统,开发者可以轻松定制界面的外观,包括颜色、字体、边距等。
- **动画与过渡效果**:Vue.js 内置了对动画的支持,结合 NativeScript 的原生动画能力,可以实现流畅且自然的过渡效果,提升用户体验。
### 5.2 数据处理与存储
数据处理与存储是移动应用开发中的重要环节。本项目采用了多种策略来确保数据的安全性和高效处理。
#### 数据处理
- **状态管理**:利用 Vuex 等状态管理库来集中管理应用的状态,确保数据的一致性和可预测性。
- **异步请求**:使用 Axios 或 Fetch API 等库进行网络请求,处理与后端的数据交互。
- **数据绑定**:Vue.js 的数据绑定机制使得开发者能够轻松地将数据与视图关联起来,实现数据驱动的界面更新。
#### 存储方案
- **本地存储**:对于不需要长期保存的数据,可以使用 NativeScript 提供的本地存储解决方案,如 `localStorage` 或 SQLite 数据库。
- **云存储**:对于需要跨设备同步的数据,可以考虑使用 Firebase 或 AWS Amplify 等云服务提供商的解决方案。
- **加密与安全**:在处理敏感数据时,应采取加密措施,确保数据的安全性。
### 5.3 多平台适配策略
为了确保应用能够在 iOS 和 Android 两个平台上良好运行,本项目采取了一系列多平台适配策略。
#### 自适应布局
- **使用百分比单位**:在布局中使用百分比单位,而不是固定像素值,以适应不同屏幕尺寸。
- **条件渲染**:根据当前平台的特性,使用 Vue.js 的条件渲染功能来显示不同的布局或组件。
#### 平台特异性代码
- **平台检测**:利用 NativeScript 的平台检测功能,编写针对不同平台的特异性代码。
- **样式差异**:考虑到 iOS 和 Android 在界面设计上的差异,可以为每个平台定义不同的样式规则。
#### 测试与调试
- **模拟器与真机测试**:在开发过程中,使用模拟器和真机进行充分的测试,确保应用在不同平台上的兼容性和稳定性。
- **自动化测试**:利用 Detox 或 Appium 等工具进行自动化测试,覆盖常见的使用场景和异常情况。
通过上述策略,开发者可以确保应用在不同平台上的表现一致且优秀,为用户提供无缝的使用体验。
## 六、性能优化
### 6.1 性能监测与分析
在移动应用开发中,性能监测与分析是确保应用流畅运行的关键环节。对于基于 NativeScript、Vue 和 TypeScript 的项目来说,性能监测不仅能够帮助开发者识别瓶颈所在,还能指导他们采取有效的优化措施。以下是一些常用的性能监测工具和技术:
- **Chrome DevTools**:NativeScript 支持使用 Chrome DevTools 进行调试,这对于性能分析尤为重要。开发者可以利用 DevTools 中的 Performance 面板来记录应用的运行情况,包括 CPU 使用率、内存占用、渲染时间等关键指标。
- **Lighthouse**:这是一个开源的自动化工具,可以用来审计网页应用的性能、可访问性、最佳实践等方面。虽然 Lighthouse 主要针对 Web 应用,但它也可以被用来评估 NativeScript 应用的性能。
- **Xcode Instruments**:对于 iOS 平台,Xcode Instruments 提供了强大的性能分析工具,可以帮助开发者深入了解应用的运行状况,包括 CPU 使用情况、内存泄漏等问题。
- **Android Profiler**:Android Studio 中的 Android Profiler 是一个非常有用的工具,它可以帮助开发者监控应用的 CPU、内存和网络使用情况,从而找出性能瓶颈。
通过这些工具和技术,开发者可以有效地监测应用的性能,并基于收集到的数据进行针对性的优化。
### 6.2 常见性能问题与解决方案
在开发过程中,开发者可能会遇到一些常见的性能问题。下面列举了一些典型的问题及其解决方案:
- **过度渲染**:当应用频繁地重新渲染界面时,会导致性能下降。解决这个问题的一种方法是使用 Vue.js 的 `key` 属性来优化列表渲染,或者使用虚拟 DOM 库如 `vue-virtual-scroller` 来减少不必要的渲染。
- **内存泄漏**:内存泄漏是另一个常见的性能问题。开发者可以通过定期清理不再使用的资源、合理使用事件监听器等方式来避免内存泄漏。
- **网络延迟**:网络请求往往是影响应用性能的重要因素之一。为了减少网络延迟,可以采用缓存策略、数据压缩等手段来优化网络请求。
- **启动时间过长**:应用的启动时间直接影响用户的体验。通过代码分割、懒加载等技术可以显著缩短应用的启动时间。
### 6.3 优化实践案例分享
为了更好地理解如何优化 NativeScript + Vue + TypeScript 项目的性能,下面分享一个具体的优化实践案例:
#### 案例背景
假设有一个电商应用,其中包含大量的商品列表页面。在最初的版本中,每当用户滚动列表时,都会触发频繁的重新渲染,导致性能下降。
#### 优化方案
1. **使用虚拟滚动**:通过引入 `vue-virtual-scroller` 这样的库,只渲染当前可见区域内的商品项,大幅减少了 DOM 操作的数量。
2. **代码分割**:将商品详情页的组件代码进行分割,仅在用户点击商品时才加载详情页,减少了初始加载时间。
3. **缓存策略**:对于频繁访问的商品数据,采用缓存策略来减少网络请求次数,提高加载速度。
#### 优化结果
经过上述优化措施后,应用的性能得到了显著提升。滚动列表时的响应速度更快,启动时间也明显缩短,整体用户体验得到了改善。
通过这些具体的优化实践案例,我们可以看到,通过合理的性能监测与分析,结合有针对性的优化措施,可以有效地提升 NativeScript + Vue + TypeScript 项目的性能表现。
## 七、持续集成与部署
### 7.1 自动化构建流程
在 NativeScript + Vue + TypeScript 的项目中,自动化构建流程是确保开发效率和产品质量的关键环节。通过自动化构建,开发者可以实现代码的自动编译、测试和打包,从而节省时间和精力,专注于应用的核心功能开发。
#### 构建工具选择
- **Webpack**:作为前端开发领域中最流行的构建工具之一,Webpack 支持 TypeScript 和 Vue.js 的集成,能够很好地满足本项目的构建需求。
- **Gulp** 或 **Grunt**:对于简单的任务自动化,如文件合并、压缩等,Gulp 或 Grunt 也是不错的选择。
#### 构建流程设计
1. **代码编译**:使用 TypeScript 编译器将 TypeScript 代码转换为 JavaScript 代码。
2. **资源打包**:利用 Webpack 将所有的 JavaScript、CSS 和静态资源文件打包成一个或多个文件。
3. **代码压缩**:使用 UglifyJS 或 Terser 等工具压缩 JavaScript 和 CSS 文件,减小程序包的大小。
4. **测试执行**:运行单元测试和端到端测试,确保应用的功能正确无误。
5. **构建报告生成**:生成详细的构建报告,包括构建时间、文件大小等信息,帮助开发者监控构建过程。
通过自动化构建流程,开发者可以确保每次提交的代码都能够顺利通过编译和测试,提高项目的稳定性和可靠性。
### 7.2 持续集成服务的配置
持续集成(CI)是一种软件开发实践,通过频繁地将代码集成到共享仓库中,并自动运行构建和测试,以确保代码的质量和稳定性。对于 NativeScript + Vue + TypeScript 的项目来说,配置 CI 服务可以进一步提高开发效率和代码质量。
#### CI 服务选择
- **Jenkins**:一个广泛使用的开源 CI/CD 工具,支持高度定制化的构建流程。
- **Travis CI** 或 **CircleCI**:云服务提供商,提供即开即用的 CI 解决方案,适用于小型到中型项目。
#### CI 配置步骤
1. **安装 CI 服务**:根据所选 CI 服务的文档,安装并配置相应的插件或客户端。
2. **配置构建任务**:定义构建任务,包括代码编译、测试执行等步骤。
3. **设置触发规则**:配置触发规则,如每次提交代码时自动触发构建。
4. **集成测试结果**:将测试结果集成到 CI 服务中,确保每次构建都包含测试结果。
5. **通知机制**:配置通知机制,当构建失败或测试未通过时,自动发送邮件或消息通知。
通过持续集成服务的配置,开发者可以确保代码的质量,并及时发现和解决问题,提高项目的整体稳定性。
### 7.3 应用发布与分发
应用发布与分发是移动应用开发的最后一步,也是至关重要的一步。对于 NativeScript + Vue + TypeScript 的项目来说,正确的发布和分发策略可以确保应用能够顺利到达用户手中。
#### 发布准备
- **签名证书**:对于 Android 平台,需要生成签名证书;对于 iOS 平台,则需要在 Apple Developer Portal 中注册应用并下载证书。
- **应用信息**:填写应用的基本信息,如名称、描述、图标等。
- **权限设置**:根据应用的功能需求,设置必要的权限。
#### 分发渠道
- **Google Play Store**:对于 Android 应用,可以通过 Google Play Store 进行分发。
- **Apple App Store**:对于 iOS 应用,则需要通过 Apple App Store 进行分发。
- **内部测试通道**:在正式发布前,可以利用内部测试通道进行预发布测试,收集反馈并进行调整。
#### 发布流程
1. **构建发布版本**:使用 NativeScript CLI 构建发布版本的 APK 或 IPA 文件。
2. **上传至应用商店**:登录应用商店的开发者后台,上传构建好的 APK 或 IPA 文件。
3. **审核与发布**:等待应用商店的审核,审核通过后即可正式发布应用。
通过精心准备和规划,开发者可以确保应用顺利发布,并成功分发给目标用户群体。
## 八、总结
本文详细介绍了如何利用 NativeScript、Vue 与 TypeScript 构建高质量的移动应用。从技术概述到具体实践,我们探讨了这些技术如何协同工作以提供高效的开发体验。通过整合 NativeScript 的原生性能与 Vue 的灵活性,再加上 TypeScript 的类型安全性,开发者能够构建出既美观又高效的用户界面,并确保应用在 iOS 和 Android 平台上的一致性和稳定性。此外,本文还强调了性能优化、持续集成与部署的重要性,为开发者提供了实用的指导和建议。总之,本示例项目为希望使用这些技术栈进行移动应用开发的开发者提供了一个坚实的基础。