主编辑区改造准备
This commit is contained in:
@@ -32,6 +32,14 @@ export type MnoteRuntimeConfig = {
|
||||
* 说明:实验壳必须显式开启,禁止仅因配置了 mnoteWebBaseUrl 就自动进入主界面链路。
|
||||
*/
|
||||
mnoteWebTreeShellEnabled?: boolean;
|
||||
/**
|
||||
* 编辑器 host 选择。
|
||||
* 说明:这里只允许显式选择实验 host,默认主链仍由 BlockNote 承担。
|
||||
*/
|
||||
documentEditorHost?:
|
||||
| "blocknote"
|
||||
| "leptos_tiptap_inline"
|
||||
| "leptos_tiptap_iframe_debug";
|
||||
/**
|
||||
* 是否为桌面端(Electron)运行。
|
||||
*/
|
||||
@@ -140,7 +148,7 @@ const readFromPublicJson = (): Partial<MnoteRuntimeConfig> => {
|
||||
// 说明:桌面端与网页端共用 public/mnote-env.json 作为“公共环境文件”。
|
||||
// 桌面端运行时 process.cwd() 会被 Electron 切到 desktop-next 根目录。
|
||||
// 网页端运行时 process.cwd() 通常为 wolai-frontend。
|
||||
|
||||
|
||||
// 说明:这里不能直接静态引入 `node:fs` / `node:path`,
|
||||
// 否则客户端 bundle 在解析该模块时会把它们也当成浏览器依赖。
|
||||
// Node 22 优先走 `process.getBuiltinModule`,其余环境再兜底到 runtime require。
|
||||
@@ -184,13 +192,6 @@ const normalizeRuntimeConfig = (cfg: MnoteRuntimeConfig): MnoteRuntimeConfig =>
|
||||
cfg.isDesktop ??
|
||||
(typeof window === "undefined" ? process.env.MNOTE_DESKTOP === "1" : false);
|
||||
|
||||
// 说明:`onlyofficeBaseUrl` / `onlyofficeStorageHostOverride` 属于“通用默认值”。
|
||||
// 但我们在 `public/mnote-env.json` 里同时提供了 Web/Desktop 两套配置,
|
||||
// 因此这里应当优先选择与平台匹配的字段,避免被环境变量中的默认值覆盖。
|
||||
//
|
||||
// 典型场景:开发机环境变量仍是 `http://localhost:8081`,但网页端需要走
|
||||
// `https://onlyoffice.<域名>`。若不调整优先级,远程浏览器会尝试访问它自己
|
||||
// 的 localhost,从而导致 docx 打不开。
|
||||
const onlyofficeBaseUrl = isDesktop
|
||||
? cfg.onlyofficeBaseUrlDesktop ||
|
||||
cfg.onlyofficeBaseUrl ||
|
||||
@@ -201,9 +202,6 @@ const normalizeRuntimeConfig = (cfg: MnoteRuntimeConfig): MnoteRuntimeConfig =>
|
||||
cfg.onlyofficeBaseUrlDesktop ||
|
||||
"";
|
||||
|
||||
// 说明:这里需要用 `??` 而不是 `||`,允许通过配置显式传入空字符串来“关闭 override”。
|
||||
// 否则 Web 端配置为 "" 时,会被环境变量里的默认值(例如 host.docker.internal)误覆盖,
|
||||
// 进而导致 ONLYOFFICE 文档服务器无法访问真实的存储地址。
|
||||
const onlyofficeStorageHostOverride = isDesktop
|
||||
? (cfg.onlyofficeStorageHostOverrideDesktop ??
|
||||
cfg.onlyofficeStorageHostOverride ??
|
||||
@@ -214,26 +212,13 @@ const normalizeRuntimeConfig = (cfg: MnoteRuntimeConfig): MnoteRuntimeConfig =>
|
||||
cfg.onlyofficeStorageHostOverrideDesktop ??
|
||||
"");
|
||||
|
||||
// 说明:`onlyofficeProxyOrigin` 也属于“通用默认值”。在 Web 端需要优先使用
|
||||
// onlyofficeProxyOriginWeb,避免被旧的通用值(例如 Cloudflare 域名)覆盖,
|
||||
// 否则会导致 ONLYOFFICE 文档服务器回源到错误的公网入口。
|
||||
const onlyofficeProxyOrigin = isDesktop
|
||||
? cfg.onlyofficeProxyOrigin || ""
|
||||
: cfg.onlyofficeProxyOriginWeb ||
|
||||
cfg.onlyofficeProxyOrigin ||
|
||||
"";
|
||||
? (cfg.onlyofficeCallbackOriginDesktop ?? cfg.onlyofficeProxyOrigin ?? cfg.onlyofficeProxyOriginWeb)
|
||||
: (cfg.onlyofficeProxyOriginWeb ?? cfg.onlyofficeProxyOrigin ?? cfg.onlyofficeCallbackOriginDesktop);
|
||||
|
||||
// 说明:ONLYOFFICE 回调(保存)必须是“文档服务器可访问”的地址。
|
||||
// Web 端优先用 onlyofficeCallbackOriginWeb(通常是 http://host.docker.internal:3000)。
|
||||
const onlyofficeCallbackOrigin = isDesktop
|
||||
? cfg.onlyofficeCallbackOriginDesktop ||
|
||||
cfg.onlyofficeCallbackOrigin ||
|
||||
cfg.onlyofficeCallbackOriginWeb ||
|
||||
""
|
||||
: cfg.onlyofficeCallbackOriginWeb ||
|
||||
cfg.onlyofficeCallbackOrigin ||
|
||||
cfg.onlyofficeCallbackOriginDesktop ||
|
||||
"";
|
||||
? (cfg.onlyofficeCallbackOriginDesktop ?? cfg.onlyofficeCallbackOrigin ?? cfg.onlyofficeCallbackOriginWeb)
|
||||
: (cfg.onlyofficeCallbackOriginWeb ?? cfg.onlyofficeCallbackOrigin ?? cfg.onlyofficeCallbackOriginDesktop);
|
||||
|
||||
const mnoteWebBaseUrl = (cfg.mnoteWebBaseUrl ?? "").trim().replace(/\/+$/, "");
|
||||
const mnoteWebTreeShellEnabled =
|
||||
@@ -251,7 +236,7 @@ const normalizeRuntimeConfig = (cfg: MnoteRuntimeConfig): MnoteRuntimeConfig =>
|
||||
};
|
||||
};
|
||||
|
||||
export const getMnoteRuntimeConfig = (): MnoteRuntimeConfig => {
|
||||
export function getMnoteRuntimeConfig(): MnoteRuntimeConfig {
|
||||
if (typeof window !== "undefined") {
|
||||
return normalizeRuntimeConfig(window.__MNOTE_RUNTIME_CONFIG__ ?? readFromEnv());
|
||||
}
|
||||
@@ -272,13 +257,8 @@ export const getMnoteRuntimeConfig = (): MnoteRuntimeConfig => {
|
||||
...envRuntime,
|
||||
// 说明:Rust Web 的 tree shell 属于运行期开关,必须允许 public/mnote-env.json
|
||||
// 在网页端覆盖环境变量;否则开发机上的旧 NEXT_PUBLIC_* 会把显式开关吃掉。
|
||||
...(publicRuntime.mnoteWebBaseUrl !== undefined
|
||||
? { mnoteWebBaseUrl: publicRuntime.mnoteWebBaseUrl }
|
||||
: {}),
|
||||
...(publicRuntime.mnoteWebTreeShellEnabled !== undefined
|
||||
? { mnoteWebTreeShellEnabled: publicRuntime.mnoteWebTreeShellEnabled }
|
||||
: {}),
|
||||
isDesktop,
|
||||
mnoteWebTreeShellEnabled:
|
||||
publicRuntime.mnoteWebTreeShellEnabled ?? envRuntime.mnoteWebTreeShellEnabled,
|
||||
};
|
||||
return normalizeRuntimeConfig(merged);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user