@equinor/subsurface-app-management

中文文档
5.6.2发布于 2026/11/11ISCTypeScriptES Module构建来源已验证近 30 天下载 2万

反应 Typescript 组件/ 呼克以等效/ sam 进行通信

中文使用文档
文档目录6 节
  1. 1. 创建 proxy/ai-proxy.conf.template
  2. 2. 替换 proxy/nginx.conf
  3. 3. 替换 env.sh
  4. 4. 替换 Dockerfile
  5. 5. 最新情况 radixconfig.yaml
  6. 6. 核实
intro-logo

此软件包包含用于通信的组件、 utils、 提供者和钩子 equinor/SubsurfAppManagement 由扩充团队开发.

快速链接

建筑和出版

合并代码后自动构建和发布 main 分支,如果包.json版本号更高.

最新版本

main

通过 nginx 代理应用程序透视

自动屏蔽器屏蔽请求 *.in.applicationinsights.azure.com这样 ApplicationInsightsProvider 发送遥测到 同源路径 /ai/v2/track 而Nginx将它转发给Azure. 跟踪是可选的:没有 APPLICATION_INSIGHTS_CONNECTION_STRING 应用程序没有追踪到任何东西,Nginx不会暴露代理路径. 摄入量 主机从 IngestionEndpoint 在连接字符串中,返回到应用程序 Insights 默认值 (单位:千美元)dc.services.visualstudio.com) 当它没有,所以不需要单独的主机变量.

将下面的文件复制到您的应用程序 Repo 中, 替换已有的文件( 例取自 equinor/sam-frontend这样 保留您的应用程序特定部分, 如端口、运行时变量和构建步骤等 。 与应用程序有关的行 每个文件上方的注释都标出"洞察".

1. 创建 proxy/ai-proxy.conf.template

location = /ai/v2/track {
    limit_req zone=ai burst=20 nodelay;
    limit_req_status 429;
    client_max_body_size 1m;

    proxy_pass https://${APPLICATION_INSIGHTS_INGESTION_HOST}/v2/track;
    proxy_ssl_server_name on;
    proxy_ssl_verify on;
    proxy_ssl_verify_depth 3;
    proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
    proxy_set_header Host ${APPLICATION_INSIGHTS_INGESTION_HOST};
    proxy_set_header X-Forwarded-For $remote_addr;
}

2. 替换 proxy/nginx.conf

用下面的文件替换文件 。 更改对标准设置: limit_req_zone 线条和 include /etc/nginx/ai-proxy.conf; 线条。 调整 listen,则 /api/ 如果您有不同的话, 代理和其他应用程序特定部件 .

limit_req_zone $binary_remote_addr zone=ai:10m rate=5r/s;

server {
    listen       5001;
    server_name  localhost;

    root   /usr/share/nginx/html;

    include /etc/nginx/conf.d/securityheaders.conf;

    # Application Insights proxy (empty file when APPLICATION_INSIGHTS_CONNECTION_STRING isn't set)
    include /etc/nginx/ai-proxy.conf;

    location /api/ {
        client_max_body_size 100M;
        proxy_pass ${API_URL};
    }

    location / {
        index  index.html index.htm;
        try_files $uri /index.html;
    }

    location /env-config.js {
        add_header Cache-Control "no-cache";
        proxy_cache_bypass $http_pragma;
        proxy_cache_revalidate on;
        expires off;
        access_log off;
    }

    location /env.sh {
        deny all;
    }

    location ~ \.html$ {
        add_header Cache-Control "no-cache";
        proxy_cache_bypass $http_pragma;
        proxy_cache_revalidate on;
        expires off;
        access_log off;

        include /etc/nginx/conf.d/securityheaders.conf;
    }
}

ai-proxy.conf 一定要住进去 /etc/nginx/没有 /etc/nginx/conf.d/. nginx 自动包含所有内容 conf.d/*.conf 输入 http 语境,其中 location 无效,但无法启动.

3. 替换 env.sh

用下面的文件替换文件 。 更改对标准设置: if 块在底部。 自己留着吧 value=... 行(每个运行时间变量一个,匹配) radixconfig.yaml如果两者不同.

#!/bin/sh

# Add assignment
echo "window._env_ = {" >>./env-config.js

# For all the environment variables we want to have at
# runtime (one to one with Radixconfig)

value=$(printf '%s\n' "${CLIENT_ID}")
echo "  CLIENT_ID: \"$value\"," >>./env-config.js

value=$(printf '%s\n' "${API_CLIENT_ID}")
echo "  API_CLIENT_ID: \"$value\"," >>./env-config.js

value=$(printf '%s\n' "${NAME}")
echo "  NAME: \"$value\"," >>./env-config.js

value=$(printf '%s\n' "${API_URL}")
echo "  API_URL: \"$value\"," >>./env-config.js

value=$(printf '%s\n' "${API_SCOPE}")
echo "  API_SCOPE: \"$value\"," >>./env-config.js

value=$(printf '%s\n' "${ENVIRONMENT_NAME}")
echo "  ENVIRONMENT_NAME: \"$value\"," >>./env-config.js

value=$(printf '%s\n' "${APPLICATION_INSIGHTS_CONNECTION_STRING}")
echo "  APPLICATION_INSIGHTS_CONNECTION_STRING: \"$value\"," >>./env-config.js

echo "}" >>./env-config.js

# Application Insights proxy (optional): only render the location when a connection string is set.
# The host comes from its IngestionEndpoint, falling back to the Application Insights default.
if [ -n "${APPLICATION_INSIGHTS_CONNECTION_STRING}" ]; then
  APPLICATION_INSIGHTS_INGESTION_HOST=$(printf '%s' "${APPLICATION_INSIGHTS_CONNECTION_STRING}" | tr ';' '\n' | sed -n 's/^IngestionEndpoint=https\{0,1\}:\/\/\([^/]*\).*/\1/p' | head -n 1)
  export APPLICATION_INSIGHTS_INGESTION_HOST="${APPLICATION_INSIGHTS_INGESTION_HOST:-dc.services.visualstudio.com}"
  envsubst '${APPLICATION_INSIGHTS_INGESTION_HOST}' </etc/nginx/ai-proxy.conf.template >/etc/nginx/ai-proxy.conf
else
  : >/etc/nginx/ai-proxy.conf
fi

# Update nginx.conf and securityheaders.conf with relevant environment variables
envsubst '${API_URL}' </etc/nginx/conf.d/default.conf.template >/etc/nginx/conf.d/default.conf
envsubst '${API_URL}' </etc/nginx/conf.d/securityheaders.conf.template >/etc/nginx/conf.d/securityheaders.conf

4. 替换 Dockerfile

用下面的文件替换文件 。 更改对标准设置: ai-proxy.conf.template COPY 和两个 ai-proxy.conf 线条 RUN调整建设阶段和 EXPOSE 端口到您的应用程序.

# Base
FROM imbios/bun-node:22-alpine AS base
WORKDIR /app
COPY package.json ./
COPY bun.lock ./
COPY tsconfig.json ./
COPY vite.config.ts ./
COPY index.html ./
COPY src ./src
COPY public ./public

# Install dependencies and build
RUN bun install --frozen-lockfile && bun run build

# STAGE 2 => SETUP NGINX and Run
FROM nginxinc/nginx-unprivileged:alpine
USER 0
# Clear default nginx html file
RUN rm -rf /usr/share/nginx/html/*
COPY --from=base /app/dist /usr/share/nginx/html
COPY proxy/nginx.conf /etc/nginx/conf.d/default.conf.template
COPY proxy/securityheaders.conf /etc/nginx/conf.d/securityheaders.conf.template
COPY proxy/ai-proxy.conf.template /etc/nginx/ai-proxy.conf.template

EXPOSE 5001

# Copy shell script to container to handle runtime environment variables
WORKDIR /usr/share/nginx/html
COPY ./env.sh .

RUN rm -rf ./env-config.js \
  && touch ./env-config.js \
  && touch /etc/nginx/ai-proxy.conf \
  && chown nginx ./env-config.js /etc/nginx/ai-proxy.conf \
  && chown -R nginx /etc/nginx/conf.d \
  && chown -R nginx /usr/share/nginx/html \
  && chmod +x ./env.sh

USER 101

CMD ["/bin/sh", "-c", "./env.sh && nginx -g \"daemon off;\""]

5. 最新情况 radixconfig.yaml

对于每个应该跟踪的环境,设置连接字符串. 代理目标从它的 IngestionEndpoint 自动( 或应用程序 Insights 默认, 如果没有) 。 对于没有环境 追踪,设定为 '' 或弃去.

APPLICATION_INSIGHTS_CONNECTION_STRING: 'InstrumentationKey=...;IngestionEndpoint=https://northeurope-4.in.applicationinsights.azure.com/;...'

6. 核实

docker build -t app .
docker run --rm -d --name app-test -p 5001:5001 -e APPLICATION_INSIGHTS_CONNECTION_STRING='InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://northeurope-4.in.applicationinsights.azure.com/' app
curl -i -X POST http://localhost:5001/ai/v2/track -d '[]'   # reaches Azure (200/400), not 404/502
docker stop app-test

# No connection string set: nginx still starts without the proxy path
docker run --rm -d --name app-test -p 5001:5001 app
docker logs app-test
docker stop app-test

替换 5001 端口为您 nginx.conf 监听,并添加应用程序的其他需要变量(NAME, (中文(简体) ), ENVIRONMENT_NAME, (中文(简体) ), API_URL如果需要的话.

版本与发布记录

@equinor/subsurface-app-management 共发布 88 个版本,首次发布于 2024/07/01;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.6.2latest2026/11/113 天前
5.6.12026/11/0310 天前
5.6.02026/11/0211 天前
5.5.02026/10/2816 天前
5.4.72026/04/286 个月前
5.4.62026/04/246 个月前

其他发布通道:beta → 4.4.3-beta.0。

关于 @equinor/subsurface-app-management 的常见问题

@equinor/subsurface-app-management 是什么?

反应 Typescript 组件/ 呼克以等效/ sam 进行通信

如何安装 @equinor/subsurface-app-management?

在项目目录运行 npm install @equinor/subsurface-app-management,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^19.0.0)、react-dom(^19.0.0)、@tanstack/react-query(*)、@tanstack/react-router(*)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@equinor/subsurface-app-management 支持 TypeScript 吗?

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

@equinor/subsurface-app-management 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@equinor/subsurface-app-management 可以商用吗?

@equinor/subsurface-app-management 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@equinor/subsurface-app-management 的下载量有多少?

根据 npm 官方下载统计,@equinor/subsurface-app-management 在 2026/10/14 – 2026/11/12 这 30 天内被下载 20,228 次,日均约 674 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@equinor/subsurface-app-management 还在维护吗?

最新版本 5.6.2 发布于 2026/11/11(3 天前);至今共发布 88 个版本,其中过去 12 个月发布了 19 个;首次发布于 2024/07/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。