本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

import-map-deployer是一个后端服务,用于更新import map JSON文件。使用该服务时,前端部署通过两步完成:
curl或httpie)修改现有import map,指向新上传的文件。这两步通常在CI流程中执行,以实现前端代码的自动化部署。该服务核心价值在于解决多CI流水线并发部署时的import map覆盖问题,避免传统"拉取-修改-重新上传"流程中的竞态条件。
!import-map-deployer演示
urlSafeList配置项,限制仅允许信任的URL前缀或自定义函数验证的URL被添加到import map。readManifest和writeManifest函数实现个性化读写逻辑。default、prod、test等不同环境的import map。import-map-deployer已发布到DockerHub,镜像名为singlespa/import-map-deployer。
FROM singlespa/import-map-deployer:<version-tag> ENV HTTP_USERNAME=your-username HTTP_PASSWORD=your-password COPY conf.js /www/ CMD ["yarn", "start", "conf.js"]
从项目根目录运行docker-compose up,需确保当前目录存在config.json配置文件:
version: '3' services: import-map-deployer: image: singlespa/import-map-deployer:<version-tag> ports: - "5000:5000" volumes: - ./config.json:/www/config.json environment: - HTTP_USERNAME=admin - HTTP_PASSWORD=secure-password
通过npm安装并运行:
# 直接运行 npx import-map-deployer config.json # 自定义端口(默认5000) PORT=8080 npx import-map-deployer config.json
配置文件用于设置认证信息、存储方式、URL安全策略等,支持JSON或JavaScript格式(.json或.js)。
| 参数名 | 类型 | 说明 |
|---|---|---|
urlSafeList | array | 信任的URL前缀列表或验证函数,未配置则允许所有URL(不推荐) |
username | string | HTTP基本认证用户名 |
password | string | HTTP基本认证密码 |
manifestFormat | string | 必须,取值"importmap"或"sofe",指定import map格式 |
locations | object | 必须,定义各环境的import map存储位置,键为环境名,值为存储路径(如s3://bucket/import-map.json) |
packagesViaTrailingSlashes | boolean | 是否自动生成带尾随斜杠的包记录,默认true |
cacheControl | string | 导入映射文件的缓存控制头,默认"public, must-revalidate, max-age=0" |
{ "urlSafeList": ["[***]", "[***]"], "username": "admin", "password": "secure-pass", "manifestFormat": "importmap", "locations": { "default": "s3://my-default-bucket/import-map.json", "prod": "s3://my-prod-bucket/import-map.json", "test": "file://./test-import-map.json" }, "s3Endpoint": "[***]", "cacheControl": "public, max-age=300" }
module.exports = { urlSafeList: [ "[***]", (url) => url.hostname.endsWith(".trusted-domain.com") ], username: "admin", password: process.env.IMD_PASSWORD, manifestFormat: "importmap", locations: { "custom-env": "custom://path" }, // 自定义读取函数 readManifest: async (env) => { const response = await fetch(`[***]{env}/import-map.json`); return response.text(); }, // 自定义写入函数 writeManifest: async (importMapStr, env) => { await fetch(`[***]{env}/import-map.json`, { method: "PUT", body: importMapStr }); return JSON.parse(importMapStr); } };
通过s3://前缀指定S3存储路径,格式为s3://bucket-name/file.json。依赖AWS CLI环境变量(如AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY)进行认证。
配置示例:
{ "manifestFormat": "importmap", "locations": { "prod": "s3://my-cdn-bucket/import-map.json" }, "s3": { "putObject": { "ACL": "public-read" } } }
通过spaces://前缀指定,格式为spaces://bucket-name.region.digitaloceanspaces.com/file.json。需配置s3Endpoint指向Spaces区域端点。
配置示例:
{ "manifestFormat": "importmap", "s3Endpoint": "[***]", "locations": { "staging": "spaces://my-spaces-bucket.nyc3.digitaloceanspaces.com/import-map.json" } }
通过对象形式配置,需设置azureContainer、azureBlob,认证通过环境变量AZURE_STORAGE_CONNECTION_STRING或配置中的azureConnectionString。
配置示例:
module.exports = { manifestFormat: "importmap", locations: { "azure-env": { azureContainer: "my-container", azureBlob: "import-map.json", azureConnectionString: process.env.AZURE_CONN_STR } } };
通过gs://前缀指定,格式为gs://bucket-name/file.json。需设置环境变量GOOGLE_APPLICATION_CREDENTIALS指向密钥文件。
配置示例:
{ "manifestFormat": "importmap", "locations": { "gcs-env": "gs://my-gcs-bucket/import-map.json" } }
直接指定本地文件路径,如./prod-import-map.json。
配置示例:
{ "manifestFormat": "importmap", "locations": { "local": "./local-import-map.json" } }
示例(curl):
curl -u admin:secure-pass localhost:5000/environments
响应:
{ "environments": [ { "name": "default", "aliases": [], "isDefault": true }, { "name": "prod", "aliases": [], "isDefault": false } ] }
示例:
curl -u admin:secure-pass "localhost:5000/import-map.json?env=prod"
示例(HTTPie):
http -a admin:secure-pass PATCH :5000/import-map.json?env=prod < new-import-map.json
请求体:
{ "service": "my-app", "url": "[***]" }
示例(curl):
curl -u admin:secure-pass -X PATCH -H "Content-Type: application/json" -d '{"service":"my-app","url":"[***]"}' "localhost:5000/services?env=stage"
示例(含特殊字符,需URI编码):
# 删除服务"@company/my-app"(编码后为"%40company%2Fmy-app") curl -u admin:secure-pass -X DELETE "localhost:5000/services/%40company%2Fmy-app?env=alpha"
username和password启用HTTP基本认证,且凭证仅CI runner知晓。urlSafeList限制信任的URL前缀,防止恶意URL注入。免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429