# @bigbinary/neeto-custom-domains-frontend 中文文档

规范地址：https://npmcn.com/package/%40bigbinary/neeto-custom-domains-frontend/

版本：3\.5\.8
npm 元数据更新时间：2026-10-29T18:18:59.916Z
中文译文更新时间：2026-11-08T02:04:29.690Z
软件包许可：UNLICENSED

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bigbinary/neeto-custom-domains-frontend
原文对照：https://npmcn.com/package/%40bigbinary/neeto-custom-domains-frontend/?lang=original
项目主页：https://github.com/bigbinary/neeto-custom-domains-nano

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2.3 MB，79 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.13
- 运行依赖：4 个
- peer 依赖：qs 6\.16\.2，url 0\.11\.4，yup 0\.32\.11，antd 5\.22\.1，util ^0\.12\.5，axios 1\.20\.0，ramda 0\.29\.0，react 18\.3\.1，buffer ^6\.0\.3，formik 2\.4\.6，i18next 22\.5\.1，zustand 4\.4\.2，dompurify 3\.4\.17，js-logger 1\.6\.1，react-dom 18\.3\.1，classnames 2\.5\.1，stream-http 3\.2\.0，tailwindcss 3\.4\.14，react-helmet ^6\.1\.0，os-browserify 0\.3\.0，react-i18next 12\.3\.1，vm-browserify 1\.1\.2，@babel/runtime 7\.29\.7，react-toastify 8\.0\.2，tty-browserify 0\.0\.1，path-browserify ^1\.0\.1，https-browserify 1\.0\.0，mixpanel-browser ^2\.45\.0，react-router-dom 5\.3\.3，crypto-browserify 3\.12\.1，source-map-loader 4\.0\.1，stream-browserify ^3\.0\.0，@bigbinary/neetoui 8\.8\.3，@honeybadger-io/js 6\.10\.1，@bigbinary/neeto-cist 1\.0\.17，@honeybadger-io/react 6\.1\.25，@tanstack/react-query 5\.59\.20，@bigbinary/neeto-atoms 1\.1\.2，@bigbinary/neeto-icons 1\.20\.89，@bigbinary/neeto-molecules 5\.9\.10，@tanstack/react-query-devtools 5\.59\.20，@bigbinary/neeto-commons-frontend 4\.14\.5，@bigbinary/neeto-filters-frontend 4\.5\.2
- 首次发布：2024-09-24T05:08:48.395Z
- 最新版本发布：2026-10-29T18:18:59.638Z
- 近 30 天下载量：16777（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：66（近 12 个月 31 个）

## 中文简介

Repo作为新纳米结构,配置,数据等的真理来源.

## 安装

```sh
npm install @bigbinary/neeto-custom-domains-frontend
```

也可以使用：`pnpm add @bigbinary/neeto-custom-domains-frontend`、`yarn add @bigbinary/neeto-custom-domains-frontend`、`bun add @bigbinary/neeto-custom-domains-frontend`

## README

# 需要海关域名

这个 `neeto-custom-domains-nano` 管理自定义域跨越 neto 应用.

## 目录

1.  [带有主机应用程序的开发](https://npmcn.com/package/%40bigbinary/neeto-custom-domains-frontend/#readme-development-with-host-application)
2.  [出版说明](https://npmcn.com/package/%40bigbinary/neeto-custom-domains-frontend/#readme-instructions-for-publishing)

## 带有主机应用程序的开发

引擎为netoCustomDomains提供后端设置.

#### 安装

1.  将此行添加到您的应用程序的 Gemfile 中 :

```ruby
source "NEETO_GEM_SERVER_URL" do
  # ... existing gems

  gem "neeto-custom-domains-engine"
end
```

2.  然后执行:

```shell
bundle install
```

3.  运行迁移

```
rails neeto_custom_domains_engine:install:migrations
rails db:migrate
```

#### 使用量

1.  添加关联

```ruby
# If custom domain is associated to Organization
class Organization < ApplicationRecord
  include NeetoCustomDomainsEngine::CustomDomainable
end

# If custom domain is associated to other resources (eg: Site)
class Site < ApplicationRecord
  include NeetoCustomDomainsEngine::CustomDomainable
end
```

关注的还有: `custom_domains` 协会, `primary_custom_domain` 财务报告和审定财务报表 `canonical_root_url(fallback)`删除任何 `has_many :custom_domains` 或者说 `primary_custom_domain` 模型已经定义了。 模型方法凌驾于 关切,而该关切的版本只返回一个没有 重定向,即光子URL和重定向依赖.

2.  添加控制器

所有常见的控制器逻辑被提取到引擎上. 然而,我们仍然需要 从主机应用程序控制器上装入一些记录.

如果自定义域与 `Organization`,添加一个 `Api::V1::CustomDomainable` 在主机应用程序中关注并将其纳入 控制器。 控制器。 这使得装载器可以跨需要它的控制器重新使用.

```ruby
# app/controllers/concerns/api/v1/custom_domainable.rb
module Api::V1::CustomDomainable
  extend ActiveSupport::Concern

  private

    def load_custom_domainable!
      @custom_domainable = organization
    end
end
```

```ruby
class Api::V1::Admin::CustomDomainsController < NeetoCustomDomainsEngine::DomainsController
  include Api::V1::CustomDomainable
end
```

如果自定义域与另一个资源(如. `Site`),定义 `load_custom_domainable!` 直接在控制器中:

```ruby
class Api::V1::Admin::CustomDomainsController < NeetoCustomDomainsEngine::DomainsController
  private

    def load_custom_domainable!
      @custom_domainable = organization.sites.find(params[:site_id])
    end
end
```

3.  添加一个 `CustomDomainConcern` 模式关注

发动机的 `NeetoCustomDomainsEngine::Domain` 模式需求 `custom_domain_url` 财务报告和审定财务报表 `organization` 可在域名记录中查阅——用于 例如,在通知电子邮件中生成链接时,以及在按下 域名.

在下面的精确路径下定义主机应用程序中的顾虑. 发动机 自动包含通过 `include CustomDomainConcern if defined?(CustomDomainConcern)`, (中文(简体) ), 因此不需要初始器或手动补丁——铁路自动加载处理.

返回路径 `custom_domain_url` 是特定产品。 指着它 无论自定义域设置页面挂载在您的产品管理器中 面板(下面的示例使用NeetoQuiz的路径;替换为您的产品).

```ruby
# app/models/concerns/custom_domain_concern.rb
module CustomDomainConcern
  extend ActiveSupport::Concern

  def custom_domain_url
    root_url = organization.root_url
    # Replace this path with the route to the custom domain settings page
    # in your product's admin panel.
    "#{root_url}/admin/admin-panel/custom-domain"
  end

  def organization
    custom_domainable
  end
end
```

如果 `custom_domainable` 这不是 `Organization` (例如:. `Site`, (中文(简体) ), 更新 `organization` 转至自己的组织(例如:. `custom_domainable.organization`) (中文(简体) ).

4.  在您的应用程序中包含以下模块 `config/routes.rb` 文件 :

```ruby
include NeetoCustomDomainsEngine::Routes::Draw

```

5.  定义所需路线.

```ruby
# config/routes.rb
custom_domains_routes :acme

# routes/api.rb within the admin routes
custom_domains_routes :domain
```

6.  添加前端组件 . `url` 应该是自定义域的 api 控制器。 控制器.

```js
import { CustomDomain as NeetoCustomDomainDashboard } from "@bigbinary/neeto-custom-domains-frontend";
import { BASE_API_V1_URL, SINGULAR } from "neetocommons/constants";
import HelpPopover from "neetomolecules/HelpPopover";
import { useTranslation } from "react-i18next";

import routes from "routes";
import { EVENTS } from "src/constants";
import { CUSTOM_DOMAIN_HELP_DOC_URL } from "src/constants/urls";

const CustomDomain = () => {
  const { t } = useTranslation();

  const breadcrumbs = [
    { link: routes.admin.settings.index, text: t("titles.settings") },
    {
      link: routes.admin.settings.customDomain,
      text: t("neetoCustomDomains.customDomain", SINGULAR),
    },
  ];

  const CUSTOM_DOMAIN_DNS_PROVIDER_HELP_DOCS = {
  cloudflare: {
    subdomain: `${PERMANENT_URL}/permanent-url-1`,
    rootDomain: `${PERMANENT_URL}/permanent-url-2`,
  },
  unknown: {
    subdomain: `${PERMANENT_URL}/permanent-url-3`,
    rootDomain: `${PERMANENT_URL}/permanent-url-4`,
  },
  namecheap: {
    subdomain: `${PERMANENT_URL}/permanent-url-5`,
    rootDomain: `${PERMANENT_URL}/permanent-url-6`,
  },
  hostinger: {
    subdomain: `${PERMANENT_URL}/permanent-url-7`,
    rootDomain: `${PERMANENT_URL}/permanent-url-8`,
  },
  digitalocean: {
    subdomain: `${PERMANENT_URL}/permanent-url-9`,
    rootDomain: `${PERMANENT_URL}/permanent-url-10`,
  },
  godaddy: {
    subdomain: `${PERMANENT_URL}/permanent-url-11`,
    rootDomain: `${PERMANENT_URL}/permanent-url-12`,
  },
  squarespace: {
    subdomain: `${PERMANENT_URL}/permanent-url-13`,
    rootDomain: `${PERMANENT_URL}/permanent-url-14`,
  },
  wix: {
    subdomain: `${PERMANENT_URL}/permanent-url-15`,
    rootDomain: `${PERMANENT_URL}/permanent-url-16`,
  },
  porkbun: {
    subdomain: `${PERMANENT_URL}/permanent-url-17`,
    rootDomain: `${PERMANENT_URL}/permanent-url-18`,
  },
  networksolutions: {
    subdomain: `${PERMANENT_URL}/permanent-url-19`,
    rootDomain: `${PERMANENT_URL}/permanent-url-20`,
  },
  aws: {
    subdomain: `${PERMANENT_URL}/permanent-url-21`,
    rootDomain: `${PERMANENT_URL}/permanent-url-22`,
  },
  strato: {
    subdomain: `${PERMANENT_URL}/permanent-url-23`,
    rootDomain: `${PERMANENT_URL}/permanent-url-24`,
  },
}

  return (
    <div className="w-full">
      <NeetoCustomDomainDashboard
        appName="appname" // Eg: `cal`, `form`
        dnsHelpDocs={CUSTOM_DOMAIN_DNS_PROVIDER_HELP_DOCS}
        helpDocUrl={CUSTOM_DOMAIN_HELP_DOC_URL}
        subdomainPlaceholder="subdomain-placeholder" // Eg: `schedule` for NeetoCal and `form` for NeetoForm
        url={`${BASE_URL}/custom-domains`}
        { ...{ breadcrumbs } }
      />
    </div>
  );
};

export default CustomDomain;
```

7.  挂载 `CustomDomain` 在理想路径中实现组件.

##### SIO: 重定向到自定义域和犬类 URL

一旦自定义域激活,产品子域上的公开页面应当 重定向到它,而犬形URL应该指向它.

1.  包含 `NeetoCustomDomainsEngine::CanonicalHostRedirection` 在公众中 只有基础控制器。 永不包含在管理员、 API 或 认证控制器中 . 他们必须继续工作 在子域,所以客户的域破 还可以登录并修复.
2.  关注的内容是: `@organization`。如果可域为 其它( 如: a) `Site`),推翻私有方法 `canonical_custom_domainable`。 。 。 .
3.  使用 `canonical_url` 页:1 `<link rel="canonical">` 财务报告和审定财务报表 `og:url`它会保持 `?page=N` 的页面,并删除其他查询参数.
4.  构建站点映射和机器人 URL `canonical_root_url(fallback)`,其中 倒置是子域基址.

GET 和 HEAD 请求在子域上获得一个 301 到同一路径并查询 主自定义域。 重定向只在域时发生 活动且没有自己的方向。 否则子域服务于 页面和目录 URL 返回到子域。 这些要求从来没有 重定向: JSON 请求, 浏览器加载不属于顶级页面 导航(a) `Sec-Fetch-Dest` 其他 `document`,例如iframes,获取 和XHR呼叫或图像),签名用户(因此是私人内容和草稿) 预览会继续在子域上工作,并请求其它自定义 域名。 301型机车被私藏一个小时.

每个重定向臂都有一个存储证书域活性探测器. 若为 重新定向的请求不会在一分钟内到达自定义域, 引擎运行 `ReconcileCertificateJob` 对于这个领域。 无法实现的域 超过一个小时的地址被标记失败, 并且所有者会收到电子邮件 。 在自定义域上被击中,或者一个探测器, 被信任为六至 7小时,所以每个域 探测最多一次在该窗口.

##### ENV 变量

对于这个引擎的运行,我们需要以下的env变量.

```
LETS_ENCRYPT_PRIVATE_KEY: < For requesting SSL certificates >
LETS_ENCRYPT_DIRECTORY_URL: < For requesting SSL certificates >
LETS_ENCRYPT_APP_NAME: < For pushing SSL certificate and custom domains >
NEETO_DEPLOY_APP: < To identify in which platform the app is deployed NeetoDEploy/Heroku>
NEETO_DEPLOY_AUTH_TOKEN: <For pushing SSL certificate and custom domains>
```

可选的,仅进行:

```
CUSTOM_DOMAIN_EDGE_CERTIFICATE_SUFFIX: < e.g. review.neetoautomation.com >
```

主机名在此后缀下的一个标签在未进行DNS检查或检查的情况下被激活 证书, 因为 Cloudflare 的通配证书已经为他们服务 。 没错 仅在 `Rails.env.staging?`,所以设置它 任何地方没有效果.

## 将已有域迁移到 Cloudflare

Cloudflare- for-SaaS 启用之前创建的域没有路由 登记 - `CloudflareValidationSyncJob` 仅当一个域是 创建, 或当获取 DCV 令牌时 。 回填任务就是这条路线. 运行它 在每个产品内,一次一个产品.

```bash
# Changes nothing. Shows what would be registered.
bundle exec rake neeto_custom_domains_engine:cloudflare:backfill_report

# Registers them.
bundle exec rake neeto_custom_domains_engine:cloudflare:backfill
```

它拒绝运行,除非 `NEETO_CUSTOM_DOMAINS_CERTIFICATE_BACKEND` 实值 `dual` 或者说 `cloudflare` 以及两者 `CLOUDFLARE_SAAS_ZONE_ID` 财务报告和审定财务报表 `CLOUDFLARE_SAAS_API_TOKEN` 已经设定.

| 变量 | 默认 | 它会做什么 |
| --- | --- | --- |
| `MAX_IN_FLIGHT` | `100` | 有多少个证书可以同时验证 |
| `LIMIT` | 无 | 一次放出这么多就停止 |
| `MAX_MINUTES` | `120` | 运行停止前的时钟预算 |

**`MAX_IN_FLIGHT` 这是最重要的一个.** 登记费用 API 单次通话 每个域,但每个域 等待验证民意测验 云浮大约10 每5分钟一次。 每5分钟1,200个请求限值 让天花板在120个证书左右飞行 默认离开 头室. 提高它的风险是同时限制每个产品的速度,因为限制 是每个账户而不是每个区域.

任务可以安全停止和重运行:一个已经持有 `cloudflare_hostname_id` 被跳过。 仅 `active` 域已注册 - (单位:千美元) `failed` 域名的 DNS 不指向我们, 所以注册它只是 对抗CA 域还原 `pending` 以后再跑一次再接回来 他们开始活动.

一次只能有一个回填;通过Redis锁拒绝第二个回填.

登记不是一种削减。 它离开,让我们加密服务 和云花 一边闲逛 仅当域名的 DNS 开始指向一个 代理主机名.

## 出版指令

咨询 [构建和释放软件包](https://neeto-engineering.neetokb.com/articles/building-and-releasing-packages) 关于如何出版的详细指南.

## 一体化

-   尼托卡尔
-   内托格式
-   内托Kb
-   内托引擎
-   涅盘点
-   Neeto 记录
-   尼托布吕克语Name
-   Neeto 课程
-   新代码
-   涅托德斯克语Name
-   尼托基兹语Name
-   尼托规划器
-   Neeto 发票
-   内托聊天
-   涅盘运行器

## 常见问题

### @bigbinary/neeto-custom-domains-frontend 是什么？

Repo作为新纳米结构,配置,数据等的真理来源\.

### 如何安装 @bigbinary/neeto-custom-domains-frontend？

在项目目录运行 npm install @bigbinary/neeto-custom-domains-frontend，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：qs（6\.16\.2）、url（0\.11\.4）、yup（0\.32\.11）、antd（5\.22\.1）、util（^0\.12\.5）、axios（1\.20\.0）、ramda（0\.29\.0）、react（18\.3\.1）、buffer（^6\.0\.3）、formik（2\.4\.6）、i18next（22\.5\.1）、zustand（4\.4\.2）、dompurify（3\.4\.17）、js-logger（1\.6\.1）、react-dom（18\.3\.1）、classnames（2\.5\.1）、stream-http（3\.2\.0）、tailwindcss（3\.4\.14）、react-helmet（^6\.1\.0）、os-browserify（0\.3\.0）、react-i18next（12\.3\.1）、vm-browserify（1\.1\.2）、@babel/runtime（7\.29\.7）、react-toastify（8\.0\.2）、tty-browserify（0\.0\.1）、path-browserify（^1\.0\.1）、https-browserify（1\.0\.0）、mixpanel-browser（^2\.45\.0）、react-router-dom（5\.3\.3）、crypto-browserify（3\.12\.1）、source-map-loader（4\.0\.1）、stream-browserify（^3\.0\.0）、@bigbinary/neetoui（8\.8\.3）、@honeybadger-io/js（6\.10\.1）、@bigbinary/neeto-cist（1\.0\.17）、@honeybadger-io/react（6\.1\.25）、@tanstack/react-query（5\.59\.20）、@bigbinary/neeto-atoms（1\.1\.2）、@bigbinary/neeto-icons（1\.20\.89）、@bigbinary/neeto-molecules（5\.9\.10）、@tanstack/react-query-devtools（5\.59\.20）、@bigbinary/neeto-commons-frontend（4\.14\.5）、@bigbinary/neeto-filters-frontend（4\.5\.2）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @bigbinary/neeto-custom-domains-frontend 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @bigbinary/neeto-custom-domains-frontend 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @bigbinary/neeto-custom-domains-frontend 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.13。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @bigbinary/neeto-custom-domains-frontend 可以商用吗？

@bigbinary/neeto-custom-domains-frontend 使用 UNLICENSED 许可。作者声明为 UNLICENSED，即不授予公开使用许可（与公共领域的 Unlicense 不同）。使用前需获得作者授权。以上为概括，不构成法律意见，请以许可原文为准。

### @bigbinary/neeto-custom-domains-frontend 的下载量有多少？

根据 npm 官方下载统计，@bigbinary/neeto-custom-domains-frontend 在 2026/10/08 – 2026/11/06 这 30 天内被下载 16,777 次，日均约 559 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @bigbinary/neeto-custom-domains-frontend 还在维护吗？

最新版本 3\.5\.8 发布于 2026/10/30（9 天前）；至今共发布 66 个版本，其中过去 12 个月发布了 31 个；首次发布于 2024/09/24。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

