React Native 配置 Schema
需要进行架构审查:本文档旨在支持针对 React Native 的“旧”或“遗留”架构的开发。它可能适用也可能不适用于新架构的开发,需要审查并可能需要更新。有关 React Native Windows 中 React Native 架构的信息,请参阅新旧架构。
CLI 命令 npx react-native config
以 JSON 格式输出项目和依赖项配置到 stdout
。
下文描述了 React Native for Windows 提供的项目和依赖项的架构。
有关 iOS 和 Android 架构的描述,请参阅 React Native CLI 平台文档。
架构字段用以下标签标记
标签 | 描述 |
---|---|
自动 (auto) | 项目始终由 config 计算。覆盖文件不应提供它。 |
必需 (req) | 项目是必需的。如果存在覆盖文件,则必须提供它。如果不存在覆盖文件,config 将尝试计算它。 |
可选 (opt) | 项目是可选的。如果存在覆盖文件,则可以提供它。如果不存在覆盖文件,config 可能会尝试计算它。 |
projectConfig
react-native config
将为具有 Windows 实现的应用程序项目生成以下 JSON,作为自动链接的目标。这是通过启发式方法完成的,因此如果结果不完全正确,应用程序开发人员可以提供一个手动覆盖文件:react-native.config.js
。
架构
{
folder: string,
sourceDir: string,
solutionFile: string,
project: {
projectFile: string,
projectName: string,
projectLang: string,
projectGuid: string,
},
}
顶层字段
顶层对象具有以下字段
字段 | 类型 | 标签 | 描述 |
---|---|---|---|
文件夹 (folder) | 字符串 | 自动 (auto) | 应用程序根文件夹的绝对路径,由 react-native config 确定,例如:c:\path\to\my-app |
源目录 (sourceDir) | 字符串 | 必需 (req) | Windows 实现在 folder 下的相对路径,例如:windows |
解决方案文件 (solutionFile) | 字符串 | 必需 (req) | 应用程序的 VS 解决方案文件在 sourceDir 下的相对路径,例如:MyApp.sln |
项目 (project) | object | 必需 (req) | 描述应用程序 VS 项目的对象 |
使用 WinUI3 (useWinUI3) | 布尔值 | 可选 (opt) | 如果为 true,则使用 WinUI 3。如果为 false,则使用 Windows XAML 和 WinUI 2。如果缺失,将使用 rnwRoot\PropertySheets\ExperimentalFeatures.props 中的值。 |
实验性功能 (experimentalFeatures) | object | 自动 (auto) | 从 ExperimentalFeatures.props 提取的属性 |
项目对象字段
顶层 project
具有以下字段
字段 | 类型 | 标签 | 描述 |
---|---|---|---|
项目文件 (projectFile) | 字符串 | 必需 (req) | VS 项目文件在 sourceDir 下的相对路径,例如:对于 c:\path\to\my-app\windows\MyApp\MyApp.vcxproj 是 MyApp\MyApp.vcxproj |
项目名称 (projectName) | 字符串 | 自动 (auto) | 项目名称,从 projectFile 确定,例如:MyApp |
项目语言 (projectLang) | 字符串 | 自动 (auto) | 项目语言,cpp (用于 C++)或 cs (用于 C#),从 projectFile 确定 |
项目 GUID (projectGuid) | 字符串 | 自动 (auto) | 项目标识符,从 projectFile 确定 |
MyApp
的 react-native.config.js
示例
module.exports = {
project: {
windows: {
sourceDir: 'windows',
solutionFile: 'MyApp.sln',
project: {
projectFile: 'MyApp\\MyApp.vcxproj',
},
},
},
};
dependencyConfig
react-native config
将为 node_modules
下的每个具有 Windows 实现的本地模块依赖项生成以下 JSON,以支持自动链接。这是通过启发式方法完成的,因此如果结果不完全正确,本地模块开发人员可以提供一个手动覆盖文件:react-native.config.js
。
架构
{
folder: string,
sourceDir: string,
solutionFile: string,
projects: [
{
projectFile: string,
directDependency: bool,
projectName: string,
projectLang: string,
projectGuid: string,
cppHeaders: [],
cppPackageProviders: [],
csNamespaces: [],
csPackageProviders: []
},
],
nugetPackages: [
{
packageName: string,
packageVersion: string,
cppHeaders: [],
cppPackageProviders: [],
csNamespaces: [],
csPackageProviders: [],
},
],
}
顶层字段
顶层对象具有以下字段
字段 | 类型 | 标签 | 描述 |
---|---|---|---|
文件夹 (folder) | 字符串 | 自动 (auto) | 模块根文件夹的绝对路径,由 react-native config 确定,例如:c:\path\to\app-name\node_modules\my-module |
源目录 (sourceDir) | 字符串 | 可选 (opt),如果定义了项目则必需 (req) | Windows 实现在 folder 下的相对路径,例如:windows |
解决方案文件 (solutionFile) | 字符串 | 可选 (opt) | 模块的 VS 解决方案文件在 sourceDir 下的相对路径,例如:MyModule.sln |
项目 (projects) | 数组 | 可选 (opt) | 必须添加到使用应用程序的解决方案文件中以便构建的 VS 项目数组 |
NuGet 包 (nugetPackages) | 数组 | 可选 (opt) | 包含必须作为依赖项添加到使用应用程序的本地模块的 NuGet 包数组。它可以为空,但其性质决定无法计算 |
项目对象字段
projects
数组中的对象具有以下字段
字段 | 类型 | 标签 | 描述 |
---|---|---|---|
项目文件 (projectFile) | 字符串 | 必需 (req) | VS 项目文件在 sourceDir 下的相对路径,例如:对于 c:\path\to\app-name\node_modules\my-module\windows\MyModule\MyModule.vcxproj 是 MyModule\MyModule.vcxproj |
直接依赖项 (directDependency) | bool | 必需 (req) | 是否将项目文件添加为使用应用程序项目文件的依赖项。对于提供本地模块的项目为 true |
项目名称 (projectName) | 字符串 | 自动 (auto) | 项目名称,从 projectFile 确定,例如:MyModule |
项目语言 (projectLang) | 字符串 | 自动 (auto) | 项目语言,cpp 或 cs,从 projectFile 确定 |
项目 GUID (projectGuid) | 字符串 | 自动 (auto) | 项目标识符,从 projectFile 确定 |
C++ 头文件 (cppHeaders) | 数组 | 可选 (opt) | C++ 头文件包含行数组,例如:winrt/MyModule.h ,将转换为 #include <winrt/MyModule.h> |
C++ 包提供者 (cppPackageProviders) | 数组 | 可选 (opt) | 完全限定的 C++ IReactPackageProviders 数组,例如:MyModule::ReactPackageProvider |
C# 命名空间 (csNamespaces) | 数组 | 可选 (opt) | C# 命名空间数组,例如:MyModule ,将转换为 using MyModule; |
C# 包提供者 (csPackageProviders) | 数组 | 可选 (opt) | 完全限定的 C# IReactPackageProviders 数组,例如:MyModule.ReactPackageProvider |
NuGet 包对象字段
nugetPackages
数组中的对象具有以下字段
字段 | 类型 | 标签 | 描述 |
---|---|---|---|
包名称 (packageName) | 字符串 | 必需 (req) | 要安装的 NuGet 包名称 |
包版本 (packageVersion) | 字符串 | 必需 (req) | 要安装的 NuGet 包版本 |
C++ 头文件 (cppHeaders) | 数组 | 必需 (req) | C++ 头文件包含行数组,例如:winrt/NugetModule.h ,将转换为 #include <winrt/NugetModule.h> |
C++ 包提供者 (cppPackageProviders) | 数组 | 必需 (req) | 完全限定的 C++ IReactPackageProviders 数组,例如:NugetModule::ReactPackageProvider |
C# 命名空间 (csNamespaces) | 数组 | 必需 (req) | C# 命名空间数组,例如:NugetModule ,将转换为 using NugetModule; |
C# 包提供者 (csPackageProviders) | 数组 | 必需 (req) | 完全限定的 C# IReactPackageProviders 数组,例如:NugetModule.ReactPackageProvider |
MyModule
的 react-native.config.js
示例
module.exports = {
dependency: {
platforms: {
windows: {
sourceDir: 'windows',
solutionFile: 'MyModule.sln',
projects: [
{
projectFile: 'MyModule\\MyModule.vcxproj',
directDependency: true,
}
],
},
},
},
};