
import-map-deployer是一个后端服务,用于更新https://github.com/WICG/import-maps#installation%E3%80%82%E4%BD%BF%E7%94%A8%E8%AF%A5%E6%9C%8D%E5%8A%A1%E6%97%B6%EF%BC%8C%E5%89%8D%E7%AB%AF%E9%83%A8%E7%BD%B2%E9%80%9A%E8%BF%87%E4%B8%A4%E6%AD%A5%E5%AE%8C%E6%88%90%EF%BC%9A
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,镜像名为https://hub.docker.com/repository/docker/singlespa/import-map-deployer%E3%80%82
Dockerfile示例
dockerfileFROM 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示例
从项目根目录运行docker-compose up,需确保当前目录存在config.json配置文件:
yamlversion: '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安装并运行:
bash# 直接运行 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" |
json{ "urlSafeList": ["https://unpkg.com/", "https://my-cdn.com/"], "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": "https://nyc3.digitaloceanspaces.com", "cacheControl": "public, max-age=300" }
javascriptmodule.exports = { urlSafeList: [ "https://my-cdn.com/", (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(`https://custom-storage/${env}/import-map.json`); return response.text(); }, // 自定义写入函数 writeManifest: async (importMapStr, env) => { await fetch(`https://custom-storage/${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)进行认证。
配置示例:
json{ "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区域端点。
配置示例:
json{ "manifestFormat": "importmap", "s3Endpoint": "https://nyc3.digitaloceanspaces.com", "locations": { "staging": "spaces://my-spaces-bucket.nyc3.digitaloceanspaces.com/import-map.json" } }
通过对象形式配置,需设置azureContainer、azureBlob,认证通过环境变量AZURE_STORAGE_CONNECTION_STRING或配置中的azureConnectionString。
配置示例:
javascriptmodule.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指向密钥文件。
配置示例:
json{ "manifestFormat": "importmap", "locations": { "gcs-env": "gs://my-gcs-bucket/import-map.json" } }
直接指定本地文件路径,如./prod-import-map.json。
配置示例:
json{ "manifestFormat": "importmap", "locations": { "local": "./local-import-map.json" } }
示例(curl):
bashcurl -u admin:secure-pass localhost:5000/environments
响应:
json{ "environments": [ { "name": "default", "aliases": [], "isDefault": true }, { "name": "prod", "aliases": [], "isDefault": false } ] }
示例:
bashcurl -u admin:secure-pass "localhost:5000/import-map.json?env=prod"
示例(HTTPie):
bashhttp -a admin:secure-pass PATCH :5000/import-map.json?env=prod < new-import-map.json
请求体:
json{ "service": "my-app", "url": "https://my-cdn.com/my-app-v2.js" }
示例(curl):
bashcurl -u admin:secure-pass -X PATCH -H "Content-Type: application/json" -d '{"service":"my-app","url":"https://my-cdn.com/my-app-v2.js"}' "localhost:5000/services?env=stage"
示例(含特殊字符,需URI编码):
bash# 删除服务"@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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务