Prisma自定义生成器provider相对路径问题:无法发包及多环境调用
自定义Prisma生成器路径问题的解决思路
方案1:发布为npm包(推荐)
这是最规范的长期解决方案,彻底解决路径依赖问题:
- 给生成器代码配置
package.json的bin字段,指向生成器入口文件,同时在入口文件顶部添加#!/usr/bin/env node声明,让系统识别为可执行命令。 - 将生成器发布到npm仓库(公有或私有均可),在项目中通过
npm install安装该包。 - 修改Prisma Schema配置,直接使用包名作为provider:
generator nexus { provider = "prisma-generator-custom" output = "./generated" }
无论开发、测试还是CI环境,只要包安装完成就能直接调用,无需关心路径。
方案2:用环境变量+脚本适配多场景
如果暂时不想发布包,可通过环境变量动态指定生成器路径,配合项目脚本切换:
- 在Prisma Schema中使用环境变量占位符:
generator nexus { provider = "node $PRISMA_GENERATOR_PATH" output = "./generated" }
- 在项目
package.json的scripts中添加不同环境的命令:
{ "scripts": { "prisma:generate:dev": "PRISMA_GENERATOR_PATH=../modules/prisma-generator-custom npx prisma generate", "prisma:generate:ci": "PRISMA_GENERATOR_PATH=/opt/prisma-generator-custom npx prisma generate", "prisma:generate:test": "PRISMA_GENERATOR_PATH=./node_modules/prisma-generator-custom/dist/index.js npx prisma generate" } }
不同场景执行对应的脚本即可,比如开发环境跑npm run prisma:generate:dev。
方案3:用Shell脚本作为路径中间层
通过Shell脚本固定生成器的绝对路径,避免调用路径影响:
- 在Prisma Schema所在目录(比如
prisma/)新建run-generator.sh脚本:
#!/bin/bash # 获取脚本自身所在的绝对目录(即Schema所在目录) SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd) # 拼接生成器的绝对路径,根据你的项目结构调整 GENERATOR_PATH="$SCRIPT_DIR/../modules/prisma-generator-custom" # 调用生成器并传递所有参数 node "$GENERATOR_PATH" "$@"
- 给脚本添加执行权限:
chmod +x prisma/run-generator.sh - 修改Prisma Schema的provider为该脚本:
generator nexus { provider = "./run-generator.sh" output = "./generated" }
无论从项目哪个目录执行prisma generate,脚本都会基于Schema所在目录定位生成器,路径不会出错。
内容的提问来源于stack exchange,提问作者Martin Muzatko
相关产品推荐
相关产品推荐

