You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决OpenFGA CLI容器转换DSL为JSON的乱码并实现自动转换?

OpenFGA DSL转JSON的ANSI乱码问题解决及自动转换实现

一、解决JSON里的ANSI转义码问题

你用的命令里加了-it参数,这会让Docker分配交互式终端,OpenFGA CLI默认在终端环境下输出带颜色的内容,那些[1m之类的就是ANSI样式转义码。搞定这个有两种办法:

方法1:移除-it参数

直接去掉这个参数,CLI就会输出纯文本JSON:

docker run --rm openfga/cli model transform "$(cat packages/fga/model/authModel.fga)" > packages/fga/model/authModel.json

加--rm是防止容器跑完后残留无用容器。

方法2:强制禁用颜色输出

要是非得保留-it,可以通过环境变量或者CLI参数关掉颜色:

# 用环境变量
docker run --rm -it -e NO_COLOR=1 openfga/cli model transform "$(cat packages/fga/model/authModel.fga)" > packages/fga/model/authModel.json

# 或者用CLI自带参数
docker run --rm -it openfga/cli model transform --no-color "$(cat packages/fga/model/authModel.fga)" > packages/fga/model/authModel.json

二、实现DSL变更自动转JSON

要做到文件一改就自动转换,还得让项目自包含,推荐两种方案,都用Docker管理,不用用户本地装额外工具:

方案1:用Alpine+entr轻量监听

  1. 写个shell脚本scripts/watch-fga-model.sh:
#!/bin/sh
echo "开始监听authModel.fga..."
while true; do
  # 用entr监听文件变化,触发转换命令
  cat /model/authModel.fga | entr -d docker run --rm openfga/cli model transform "$(cat /model/authModel.fga)" > /model/authModel.json
done
  1. 在docker-compose.yml里加个专门的监听服务:
version: '3.8'
services:
  fga-model-watcher:
    image: alpine:latest
    volumes:
      - ./packages/fga/model:/model
      - ./scripts:/scripts
    working_dir: /model
    command: sh /scripts/watch-fga-model.sh
    # 启动前先装entr
    entrypoint: sh -c "apk add --no-cache entr && exec $$0"

方案2:用Node.js的chokidar(贴合你的现有TS环境)

  1. 通过docker-compose装chokidar:
docker-compose run --rm your-node-service npm install chokidar --save-dev
  1. 写个TS监听脚本packages/fga/scripts/watch-model.ts:
import chokidar from 'chokidar';
import { execSync } from 'child_process';
import path from 'path';

const dslFile = path.join(__dirname, '../model/authModel.fga');
const jsonFile = path.join(__dirname, '../model/authModel.json');

// 转换命令,用Docker执行
const transformCmd = `docker run --rm openfga/cli model transform "$(cat ${dslFile})" > ${jsonFile}`;

// 先转一次初始JSON
console.log('初始化FGA模型JSON...');
execSync(transformCmd, { stdio: 'inherit' });

// 监听DSL文件变化
chokidar.watch(dslFile, { ignoreInitial: true }).on('change', () => {
  console.log('FGA模型DSL已修改,正在转JSON...');
  try {
    execSync(transformCmd, { stdio: 'inherit' });
    console.log('模型JSON更新完成');
  } catch (err) {
    console.error('转换失败:', err);
  }
});

console.log(`正在监听${dslFile}变化...`);
  1. 在package.json里加脚本:
{
  "scripts": {
    "watch:fga-model": "tsx packages/fga/scripts/watch-model.ts"
  }
}
  1. 启动监听:
docker-compose run --rm your-node-service npm run watch:fga-model

三、保证项目自包含

把所有脚本、docker-compose配置都提交到仓库,其他用户拉代码后,只需要启动docker-compose服务,就能自动处理模型转换和测试,不用本地装任何依赖,全靠Docker搞定。

内容的提问来源于stack exchange,提问作者Daniel Loiterton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:46:18