
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
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注入。您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务