跳到内容

Swagger 编辑器

SwaggerEditor 使用 forked Create React App 作为其构建基础结构。

入门

先决条件

安装 SwaggerEditor 作为 npm 包和本地开发设置都需要满足这些先决条件。

安装

假设 先决条件 已安装,SwaggerEditor npm 包是可安装的,并且适用于 Node.js >= 12.22.0。您可以通过运行以下命令通过 npm CLI 安装 SwaggerEditor

终端窗口
1
$ npm install swagger-editor@alpha

注意:当使用 bundler 构建使用 swagger-editor@5 npm 包的项目时,您可能会遇到以下 Node.js 错误:Reached heap limit Allocation failed - JavaScript heap out of memory。这是由于需要捆绑的代码量很大造成的。可以通过扩展 Node.js 最大堆限制来解决此错误:export NODE_OPTIONS="--max_old_space_size=4096"

用法

在您的应用程序中使用该包

index.js
1
import React from "react";
2
import ReactDOM from "react-dom";
3
import SwaggerEditor from "swagger-editor";
4
import "swagger-editor/swagger-editor.css";
5
6
const url =
7
"https://raw.githubusercontent.com/asyncapi/spec/v2.2.0/examples/streetlights-kafka.yml";
8
9
const MyApp = () => (
10
<div>
11
<h1>SwaggerEditor Integration</h1>
12
<SwaggerEditor url={url} />
13
</div>
14
);
15
16
self.MonacoEnvironment = {
17
/**
18
* We're building into the dist/ folder. When application starts on
19
* URL=https://example.com then SwaggerEditor will look for
20
* `apidom.worker.js` on https://example.com/dist/apidom.worker.js and
21
* `editor.worker` on https://example.com/dist/editor.worker.js.
22
*/
23
baseUrl: `${document.baseURI || location.href}dist/`,
24
};
25
26
ReactDOM.render(<MyApp />, document.getElementById("swagger-editor"));

webpack.config.js (webpack@5)

安装 webpack@5 正确构建 SwaggerEditor 所需的依赖项。

终端窗口
1
$ npm i stream-browserify --save-dev
2
$ npm i https-browserify --save-dev
3
$ npm i stream-http --save-dev
4
$ npm i util --save-dev
1
const path = require("path");
2
const webpack = require("webpack");
3
4
module.exports = {
5
mode: "production",
6
entry: {
7
app: "./index.js",
8
"apidom.worker": "swagger-editor/apidom.worker",
9
"editor.worker": "swagger-editor/editor.worker",
10
},
11
output: {
12
globalObject: "self",
13
filename: "[name].js",
14
path: path.resolve(__dirname, "dist"),
15
},
16
resolve: {
17
fallback: {
18
path: false,
19
fs: false,
20
http: require.resolve("stream-http"), // required for asyncapi parser
21
https: require.resolve("https-browserify"), // required for asyncapi parser
22
stream: require.resolve("stream-browserify"),
23
util: require.resolve("util"),
24
url: require.resolve("url"),
25
zlib: false,
26
},
27
alias: {
28
// This alias make sure we don't pull two different versions of monaco-editor
29
"monaco-editor": "/node_modules/monaco-editor",
30
// This alias makes sure we're avoiding a runtime error related to this package
31
"@stoplight/ordered-object-literal$":
32
"/node_modules/@stoplight/ordered-object-literal/src/index.mjs",
33
},
34
},
35
plugins: [
36
new webpack.ProvidePlugin({
37
Buffer: ["buffer", "Buffer"],
38
}),
39
],
40
module: {
41
rules: [
42
{
43
test: /\.css$/,
44
use: ["style-loader", "css-loader"],
45
},
46
/**
47
* The default way in which webpack loads wasm files won’t work in a worker,
48
* so we will have to disable webpack’s default handling of wasm files and
49
* then fetch the wasm file by using the file path that we get using file-loader.
50
*
51
* Resource: https://pspdfkit.com/blog/2020/webassembly-in-a-web-worker/
52
*
53
* Alternatively, WASM file can be bundled directly into JavaScript bundle as data URLs.
54
* This configuration reduces the complexity of WASM file loading
55
* but increases the overal bundle size:
56
*
57
* {
58
* test: /\.wasm$/,
59
* type: 'asset/inline',
60
* }
61
*/
62
{
63
test: /\.wasm$/,
64
loader: "file-loader",
65
type: "javascript/auto", // this disables webpacks default handling of wasm
66
},
67
],
68
},
69
};

替代的 webpack.config.js (webpack@5)

我们已经为您构建了 Web Workers 片段,它们位于 npm 发行包的 dist/umd/ 目录中。为了避免构建 Web Worker 片段的复杂性,您可以直接使用这些片段。此设置适用于生产开发 (webpack-dev-server),并将显着缩短您的构建过程。

安装 copy-webpack-plugin 和其他需要的依赖项。

终端窗口
1
$ npm i copy-webpack-plugin --save-dev
2
$ npm i stream-browserify --save-dev
3
$ npm i https-browserify --save-dev
4
$ npm i stream-http --save-dev
5
$ npm i util --save-dev
1
const path = require("path");
2
const webpack = require("webpack");
3
const CopyWebpackPlugin = require("copy-webpack-plugin");
4
5
module.exports = {
6
mode: "production",
7
entry: {
8
app: "./index.js",
9
},
10
output: {
11
globalObject: "self",
12
filename: "static/js/[name].js",
13
path: path.resolve(__dirname, "dist"),
14
},
15
resolve: {
16
fallback: {
17
path: false,
18
fs: false,
19
http: require.resolve("stream-http"), // required for asyncapi parser
20
https: require.resolve("https-browserify"), // required for asyncapi parser
21
stream: require.resolve("stream-browserify"),
22
util: require.resolve("util"),
23
url: require.resolve("url"),
24
zlib: false,
25
},
26
alias: {
27
// This alias make sure we don't pull two different versions of monaco-editor
28
"monaco-editor": "/node_modules/monaco-editor",
29
// This alias makes sure we're avoiding a runtime error related to this package
30
"@stoplight/ordered-object-literal$":
31
"/node_modules/@stoplight/ordered-object-literal/src/index.mjs",
32
},
33
},
34
plugins: [
35
new webpack.ProvidePlugin({
36
Buffer: ["buffer", "Buffer"],
37
}),
38
new CopyWebpackPlugin({
39
patterns: [
40
{
41
from: "node_modules/swagger-editor/dist/umd/apidom.worker.js",
42
to: "static/js",
43
},
44
{
45
from: "node_modules/swagger-editor/dist/umd/editor.worker.js",
46
to: "static/js",
47
},
48
],
49
}),
50
],
51
module: {
52
rules: [
53
{
54
test: /\.css$/,
55
use: ["style-loader", "css-loader"],
56
},
57
],
58
},
59
};

开发

先决条件

假设 先决条件 已安装,Node.js >=20.3.0npm >=9.6.7 是此 repo 运行所需的最低版本,但我们建议使用最新版本的 Node.js@20。

设置

如果您使用 nvm,在此存储库中运行以下命令将自动为您选择正确的 Node.js 版本

终端窗口
1
$ nvm use

运行以下命令以设置存储库以进行本地开发

终端窗口
1
$ git clone https://github.com/swagger-api/swagger-editor.git
2
$ cd swagger-editor
3
$ git checkout next
4
$ git submodule init
5
$ git submodule update
6
$ npm i
7
$ npm start

npm 脚本

Lint

终端窗口
1
$ npm run lint

运行单元和集成测试

终端窗口
1
$ npm test

运行 E2E Cypress 测试

开发环境中使用

终端窗口
1
$ npm run cy:dev

持续集成 (CI) 环境中使用

终端窗口
1
$ npm run cy:ci

构建

终端窗口
1
$ npm run build

此脚本将构建所有 SwaggerEditor 构建产物 - appesmumd

构建产物

构建产物后,将创建两个新目录:build/dist/

build/

终端窗口
1
$ npm run build:app
2
$ npm run build:app:serve

构建并提供独立的 SwaggerEditor 应用程序及其所有资产,地址为 https://127.0.0.1:3050/

dist/esm/

终端窗口
1
$ npm run build:bundle:esm

此捆绑包适合希望在其自己的应用程序中将 SwaggerEditor 用作库并拥有自己的构建过程的第三方使用。

dist/umd/

终端窗口
1
$ npm run build:bundle:umd

SwaggerEditor UMD 捆绑包在全局对象上导出 SwaggerEditor 符号。它与定义为外部的 React 捆绑在一起。这允许使用者使用他自己的 React + ReactDOM 版本并延迟挂载 SwaggerEditor。

1
<!DOCTYPE html>
2
<html lang="en">
3
<head>
4
<meta charset="utf-8" />
5
<meta name="viewport" content="width=device-width, initial-scale=1" />
6
<meta name="description" content="SwaggerEditor" />
7
<title>SwaggerEditor</title>
8
<link rel="stylesheet" href="./swagger-editor.css" />
9
</head>
10
<body>
11
<div id="swagger-editor"></div>
12
<script
13
src="https://unpkg.com/react@18/umd/react.production.min.js"
14
crossorigin
15
></script>
16
<script
17
src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"
18
crossorigin
19
></script>
20
<script src="./dist/umd/swagger-editor.js"></script>
21
<script>
22
const props = {
23
url: "https://raw.githubusercontent.com/asyncapi/spec/v2.2.0/examples/streetlights-kafka.yml",
24
};
25
const element = React.createElement(SwaggerEditor, props);
26
const domContainer = document.querySelector("#swagger-editor");
27
28
ReactDOM.render(element, domContainer);
29
</script>
30
</body>
31
</html>

npm

SwaggerEditor 在 npmjs.com 上以 swagger-editor@5 npm 包的形式发布。也可以通过运行以下命令手动生成包(假设您已经按照 设置 步骤操作)

终端窗口
1
$ npm run build:bundle:esm
2
$ npm run build:bundle:umd
3
$ npm pack

包映射

SwaggerEditor 以以下方式在 package.json 文件中映射其构建产物

package.json
1
"unpkg": "./dist/umd/swagger-editor.js",
2
"module": "./dist/esm/swagger-editor.js",
3
"browser": "./dist/esm/swagger-editor.js",
4
"jsnext:main": "./dist/esm/swagger-editor.js",
5
"exports": {
6
"./package.json": "./package.json",
7
"./swagger-editor.css": "./dist/swagger-editor.css",
8
".": {
9
"browser": "./dist/esm/swagger-editor.js"
10
},
11
"./plugins/*": {
12
"browser": "./dist/esm/plugins/*/index.js"
13
},
14
"./presets/*": {
15
"browser": "./dist/esm/presets/*/index.js"
16
},
17
"./apidom.worker": {
18
"browser": "./dist/esm/apidom.worker.js"
19
},
20
"./editor.worker": {
21
"browser": "./dist/esm/editor.worker.js"
22
}
23
}

要了解有关这些字段的更多信息,请参阅 webpack mainFields 文档Node.js 模块:包文档

文档

使用旧版本的 React

[!IMPORTANT] 旧版本我们特指 React >=17 <18

默认情况下,swagger-editor@5 npm 包带有最新版本的 React@18。可以使用旧版本的 React 使用 swagger-editor@5 npm 包。

假设我的应用程序与 swagger-editor@5 npm 包集成并使用 [email protected]

npm

为了通知 swagger-editor@5 npm 包我需要它使用我的 React 版本,我需要使用 npm overrides

1
{
2
"dependencies": {
3
"react": "=17.0.2",
4
"react-dom": "=17.0.2"
5
},
6
"overrides": {
7
"swagger-editor": {
8
"react": "$react",
9
"react": "$react-dom",
10
"react-redux": "^8"
11
}
12
}
13
}

[!NOTE] React 和 ReactDOM 覆盖被定义为对依赖项的引用。由于 react-redux@9 仅支持 React >= 18,因此我们需要使用 react-redux@8

yarn

为了通知 swagger-editor@5 npm 包我需要它使用我的特定 React 版本,我需要使用 yarn resolutions

1
{
2
"dependencies": {
3
"react": "17.0.2",
4
"react-dom": "17.0.2"
5
},
6
"resolutions": {
7
"swagger-editor/react": "17.0.2",
8
"swagger-editor/react-dom": "17.0.2",
9
"swagger-editor/react-redux": "^8"
10
}
11
}

[!NOTE] React 和 ReactDOM 解析不能定义为对依赖项的引用。不幸的是,yarn 不支持像 npm 那样使用 $react$react-dom 别名。您需要指定确切的版本。

自定义

环境变量

可以使用环境变量来指定本地 JSON/YAML 文件或远程 URL,以便 SwaggerEditor 在启动时加载。这些环境变量将在构建时烘焙到构建产物中。

当前可用的环境变量

变量名描述
REACT_APP_DEFINITION_FILE指定本地文件路径,指定的文件还必须存在于 /public/static 目录中
REACT_APP_DEFINITION_URL指定远程 URL。此环境变量当前优先于 REACT_APP_SWAGGER_FILE
REACT_APP_VERSION指定此应用程序的版本。版本是从 package.json 文件读取的。

示例环境变量值可以在 .env 文件中找到。有关使用环境变量的更多信息,请参阅 Create React App 文档的 添加自定义环境变量 部分。

在 SwaggerUI 中使用预览插件

SwaggerEditor 自带一些 preview 插件,这些插件负责渲染在编辑器中创建的定义。这些插件包括

  • EditorPreviewAsyncAPIPlugin - AsyncAPI 规范渲染支持
  • EditorPreviewAPIDesignSystemsPlugin - API 设计系统渲染支持

稍作调整,我们可以将这些插件与 SwaggerUI 结合使用,从而提供使用 SwaggerUI 渲染 AsyncAPI 或 API 设计系统定义的能力。

1
import SwaggerUI from "swagger-ui";
2
import SwaggerUIStandalonePreset from "swagger-ui/dist/swagger-ui-standalone-preset";
3
import "swagger-editor/swagger-editor.css";
4
import EditorContentTypePlugin from "swagger-editor/plugins/editor-content-type";
5
import EditorPreviewAsyncAPIPlugin from "swagger-editor/plugins/editor-preview-asyncapi";
6
import EditorPreviewAPIDesignSystemsPlugin from "swagger-editor/plugins/editor-preview-api-design-systems";
7
import SwaggerUIAdapterPlugin from "swagger-editor/plugins/swagger-ui-adapter";
8
9
SwaggerUI({
10
url: "https://petstore.swagger.io/v2/swagger.json",
11
dom_id: "#swagger-ui",
12
presets: [SwaggerUI.presets.apis, SwaggerUIStandalonePreset],
13
plugins: [
14
EditorContentTypePlugin,
15
EditorPreviewAsyncAPIPlugin,
16
EditorPreviewAPIDesignSystemsPlugin,
17
SwaggerUIAdapterPlugin,
18
SwaggerUI.plugins.DownloadUrl,
19
],
20
});

这里的关键是 SwaggerUIAdapter 插件,它使 SwaggerEditor 插件可以直接与 SwaggerUI 一起使用。

独立模式

SwaggerUI 也支持独立模式。在独立模式下,您将获得一个 TopBar,其中包含一个输入框,您可以在其中提供定义的 URL,然后 SwaggerUI 会加载该定义。

1
import SwaggerUI from "swagger-ui";
2
import SwaggerUIStandalonePreset from "swagger-ui/dist/swagger-ui-standalone-preset";
3
import "swagger-ui/dist/swagger-ui.css";
4
import "swagger-editor/swagger-editor.css";
5
import EditorContentTypePlugin from "swagger-editor/plugins/editor-content-type";
6
import EditorPreviewAsyncAPIPlugin from "swagger-editor/plugins/editor-preview-asyncapi";
7
import EditorPreviewAPIDesignSystemsPlugin from "swagger-editor/plugins/editor-preview-api-design-systems";
8
import SwaggerUIAdapterPlugin from "swagger-editor/plugins/swagger-ui-adapter";
9
10
SwaggerUI({
11
url: "https://petstore.swagger.io/v2/swagger.json",
12
dom_id: "#swagger-ui",
13
presets: [SwaggerUI.presets.apis, SwaggerUIStandalonePreset],
14
plugins: [
15
EditorContentTypePlugin,
16
EditorPreviewAsyncAPIPlugin,
17
EditorPreviewAPIDesignSystemsPlugin,
18
SwaggerUIAdapterPlugin,
19
SwaggerUI.plugins.DownloadUrl,
20
],
21
layout: "StandaloneLayout",
22
});

通过 unpkg.com 利用预览插件

可以通过 unpkg.com 以无需构建的方式利用预览插件,从而创建支持多种规范的 SwaggerUI 独立版本。

1
<!DOCTYPE html>
2
<html>
3
<head>
4
<meta charset="utf-8" />
5
<meta name="viewport" content="width=device-width, initial-scale=1" />
6
<meta name="theme-color" content="#000000" />
7
<meta name="description" content="SwaggerUIMultifold" />
8
<link
9
rel="stylesheet"
10
href="//unpkg.com/[email protected]/dist/swagger-editor.css"
11
/>
12
</head>
13
<body style="margin:0; padding:0;">
14
<section id="swagger-ui"></section>
15
16
<script src="//unpkg.com/[email protected]/swagger-ui-bundle.js"></script>
17
<script src="//unpkg.com/[email protected]/swagger-ui-standalone-preset.js"></script>
18
<script>
19
ui = SwaggerUIBundle({});
20
// expose SwaggerUI React globally for SwaggerEditor to use
21
window.React = ui.React;
22
</script>
23
<script src="//unpkg.com/[email protected]/dist/umd/swagger-editor.js"></script>
24
<script>
25
SwaggerUIBundle({
26
url: "https://petstore3.swagger.io/api/v3/openapi.json",
27
dom_id: "#swagger-ui",
28
presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
29
plugins: [
30
SwaggerEditor.plugins.EditorContentType,
31
SwaggerEditor.plugins.EditorPreviewAsyncAPI,
32
SwaggerEditor.plugins.EditorPreviewApiDesignSystems,
33
SwaggerEditor.plugins.SwaggerUIAdapter,
34
SwaggerUIBundle.plugins.DownloadUrl,
35
],
36
layout: "StandaloneLayout",
37
});
38
</script>
39
</body>
40
</html>

组合自定义的 SwaggerEditor 版本

SwaggerEditor 只是与 swagger-ui-react 一起使用的一些 SwaggerUI 插件。可以通过将单个插件与 swagger-uiswagger-ui-react 组合来创建自定义的 SwaggerEditor。

插件

可用插件列表

  • dialogs
  • dropdown-menu
  • dropzone
  • editor-content-fixtures
  • editor-content-origin
  • editor-content-persistence
  • editor-content-read-only
  • editor-content-type
  • editor-monaco
  • editor-monaco-language-apidom
  • editor-preview
  • editor-preview-api-design-systems
  • editor-preview-asyncapi
  • editor-preview-swagger-ui
  • editor-safe-render
  • editor-textarea
  • layout
  • modals
  • splash-screen
  • swagger-ui-adapter
  • top-bar
  • versions

可以通过以下方式导入单个插件

1
import EditorContentTypePlugin from "swagger-editor/plugins/editor-content-type";
2
import EditorContentReadOnlyPlugin from "swagger-editor/plugins/editor-content-read-only";

预设

除了插件之外,还可以使用预设。预设是旨在协同工作以提供复合功能的一组插件。

可用预设列表

  • textarea
  • monaco

可以通过以下方式导入单个预设

1
import TextareaPreset from "swagger-editor/presets/textarea";
2
import MonacoPreset from "swagger-editor/presets/monaco";

注意:请参考 SwaggerUI 的 插件点文档,以了解预设如何传递给 SwaggerUI。

与 swagger-ui 组合

1
import SwaggerUI from "swagger-ui";
2
import "swagger-ui/dist/swagger-ui.css";
3
import ModalsPlugin from "swagger-editor/plugins/modals";
4
import DialogsPlugin from "swagger-editor/plugins/dialogs";
5
import DropdownMenuPlugin from "swagger-editor/plugins/dropdown-menu";
6
import DropzonePlugin from "swagger-editor/plugins/dropzone";
7
import VersionsPlugin from "swagger-editor/plugins/versions";
8
import EditorTextareaPlugin from "swagger-editor/plugins/editor-textarea";
9
import EditorMonacoPlugin from "swagger-editor/plugins/editor-monaco";
10
import EditorMonacoLanguageApiDOMPlugin from "swagger-editor/plugins/editor-monaco-language-apidom";
11
import EditorContentReadOnlyPlugin from "swagger-editor/plugins/editor-content-read-only";
12
import EditorContentOriginPlugin from "swagger-editor/plugins/editor-content-origin";
13
import EditorContentTypePlugin from "swagger-editor/plugins/editor-content-type";
14
import EditorContentPersistencePlugin from "swagger-editor/plugins/editor-content-persistence";
15
import EditorContentFixturesPlugin from "swagger-editor/plugins/editor-content-fixtures";
16
import EditorPreviewPlugin from "swagger-editor/plugins/editor-preview";
17
import EditorPreviewSwaggerUIPlugin from "swagger-editor/plugins/editor-preview-swagger-ui";
18
import EditorPreviewAsyncAPIPlugin from "swagger-editor/plugins/editor-preview-asyncapi";
19
import EditorPreviewApiDesignSystemsPlugin from "swagger-editor/plugins/editor-preview-api-design-systems";
20
import TopBarPlugin from "swagger-editor/plugins/top-bar";
21
import SplashScreenPlugin from "swagger-editor/plugins/splash-screen";
22
import LayoutPlugin from "swagger-editor/plugins/layout";
23
import EditorSafeRenderPlugin from "swagger-editor/plugins/editor-safe-render";
24
25
SwaggerUI({
26
url: "https://petstore.swagger.io/v2/swagger.json",
27
dom_id: "#swagger-editor",
28
plugins: [
29
ModalsPlugin,
30
DialogsPlugin,
31
DropdownMenuPlugin,
32
DropzonePlugin,
33
VersionsPlugin,
34
EditorTextareaPlugin,
35
EditorMonacoPlugin,
36
EditorMonacoLanguageApiDOMPlugin,
37
EditorContentReadOnlyPlugin,
38
EditorContentOriginPlugin,
39
EditorContentTypePlugin,
40
EditorContentPersistencePlugin,
41
EditorContentFixturesPlugin,
42
EditorPreviewPlugin,
43
EditorPreviewSwaggerUIPlugin,
44
EditorPreviewAsyncAPIPlugin,
45
EditorPreviewApiDesignSystemsPlugin,
46
TopBarPlugin,
47
SplashScreenPlugin,
48
LayoutPlugin,
49
EditorSafeRenderPlugin,
50
],
51
layout: "StandaloneLayout",
52
});

与 swagger-ui-react 组合

1
import React from "react";
2
import ReactDOM from "react-dom";
3
import SwaggerUI from "swagger-ui-react";
4
import "swagger-ui-react/swagger-ui.css";
5
import ModalsPlugin from "swagger-editor/plugins/modals";
6
import DialogsPlugin from "swagger-editor/plugins/dialogs";
7
import DropdownMenuPlugin from "swagger-editor/plugins/dropdown-menu";
8
import DropzonePlugin from "swagger-editor/plugins/dropzone";
9
import VersionsPlugin from "swagger-editor/plugins/versions";
10
import EditorTextareaPlugin from "swagger-editor/plugins/editor-textarea";
11
import EditorMonacoPlugin from "swagger-editor/plugins/editor-monaco";
12
import EditorMonacoLanguageApiDOMPlugin from "swagger-editor/plugins/editor-monaco-language-apidom";
13
import EditorContentReadOnlyPlugin from "swagger-editor/plugins/editor-content-read-only";
14
import EditorContentOriginPlugin from "swagger-editor/plugins/editor-content-origin";
15
import EditorContentTypePlugin from "swagger-editor/plugins/editor-content-type";
16
import EditorContentPersistencePlugin from "swagger-editor/plugins/editor-content-persistence";
17
import EditorContentFixturesPlugin from "swagger-editor/plugins/editor-content-fixtures";
18
import EditorPreviewPlugin from "swagger-editor/plugins/editor-preview";
19
import EditorPreviewSwaggerUIPlugin from "swagger-editor/plugins/editor-preview-swagger-ui";
20
import EditorPreviewAsyncAPIPlugin from "swagger-editor/plugins/editor-preview-asyncapi";
21
import EditorPreviewApiDesignSystemsPlugin from "swagger-editor/plugins/editor-preview-api-design-systems";
22
import TopBarPlugin from "swagger-editor/plugins/top-bar";
23
import SplashScreenPlugin from "swagger-editor/plugins/splash-screen";
24
import LayoutPlugin from "swagger-editor/plugins/layout";
25
import EditorSafeRenderPlugin from "swagger-editor/plugins/editor-safe-render";
26
27
const SwaggerEditor = () => {
28
return (
29
<SwaggerUI
30
url={url}
31
plugins={[
32
ModalsPlugin,
33
DialogsPlugin,
34
DropdownMenuPlugin,
35
DropzonePlugin,
36
VersionsPlugin,
37
EditorTextareaPlugin,
38
EditorMonacoPlugin,
39
EditorMonacoLanguageApiDOMPlugin,
40
EditorContentReadOnlyPlugin,
41
EditorContentOriginPlugin,
42
EditorContentTypePlugin,
43
EditorContentPersistencePlugin,
44
EditorContentFixturesPlugin,
45
EditorPreviewPlugin,
46
EditorPreviewSwaggerUIPlugin,
47
EditorPreviewAsyncAPIPlugin,
48
EditorPreviewApiDesignSystemsPlugin,
49
TopBarPlugin,
50
SplashScreenPlugin,
51
LayoutPlugin,
52
EditorSafeRenderPlugin,
53
]}
54
layout="StandaloneLayout"
55
/>
56
);
57
};
58
59
ReactDOM.render(<SwaggerEditor />, document.getElementById("swagger-editor"));

Docker

预构建的 DockerHub 镜像

SwaggerEditor 可作为托管在 DockerHub 上的预构建 Docker 镜像使用。

终端窗口
1
$ docker pull swaggerapi/swagger-editor:next-v5
2
$ docker run -d -p 8080:80 swaggerapi/swagger-editor:next-v5

本地构建

特权镜像:

终端窗口
1
$ npm run build:app
2
$ docker build . -t swaggerapi/swagger-editor:next-v5
3
$ docker run -d -p 8080:80 swaggerapi/swagger-editor:next-v5

现在,在您的浏览器中打开 https://127.0.0.1:8080/

非特权镜像:

终端窗口
1
$ npm run build:app
2
$ docker build . -f Dockerfile.unprivileged -t swaggerapi/swagger-editor:next-v5-unprivileged
3
$ docker run -d -p 8080:8080 swaggerapi/swagger-editor:next-v5-unprivileged

现在,在您的浏览器中打开 https://127.0.0.1:8080/

SwaggerEditor 当前不支持自定义环境变量。

许可证

SwaggerEditor 基于 Apache 2.0 许可证 授权。SwaggerEditor 附带一个明确的 NOTICE 文件,其中包含其他法律声明和信息。

此项目使用 REUSE 规范,该规范定义了一种用于声明软件项目版权和许可的标准化方法。

软件物料清单 (SBOM)

软件物料清单在此存储库的 依赖关系图 中提供。单击 Export SBOM 按钮以下载 SPDX 格式 的 SBOM。