npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@yunflyjs/yunfly-plugin-prisma

v0.0.1

Published

yunfly prisma plugin.

Downloads

1

Readme

@yunke/yunfly-plugin-prisma

  • 新一代 orm 工具

安装

    1. 安装依赖
yarn add @yunke/yunfly-plugin-prisma
    1. 申明插件
// `src/config/config.plugin.ts` 中申明插件
const plugins: {[key:string]: string}[] = [
  {
    name: 'prisma',
    package: '@yunke/yunfly-plugin-prisma'
  }
];
export default plugins;
    1. 启用插件
// `src/config/config.default.ts` 中启用插件。
config.prisma = {
  enable: true,
  db: {
    url: 'mysql://user:password@localhost:3306/mydb'
  }
};

备注: 确保数据库能连接上且 mydb 数据库已经创建。

config.prisma 配置: 详细说明

    1. 初始化 prisma
npx prisma init --url 'mysql://user:password@localhost:3306/mydb'

备注:这个命令创建了一个名为 prisma 的新目录,其中包含一个名为 schema.prisma 的文件和一个位于项目根目录中的 .env 文件 schema.prisma 包含prisma 模式以及数据库连接和 prisma 客户端生成器。

    1. 统一初始化配置
npx prisma init --dev

备注:

prisma-init 指令说明 参考地址。 这个命令会更新 .envschema.prisma 文件, 保持配置的一致性。支持 apollo 管理配置。

    1. 创建第一个 module

schema.prisma 文件中创建第一个 User module

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

// User module
model User {
  id      Int      @id @default(autoincrement())
  email   String   @unique
  name    String?
}
    1. 生成 Prisma Client 类型文件
npx prisma generate
  • 重要提示:
  • 第一次初始化时,schema.prisma 中需要有 models 配置。
  • 每次对 Prisma schema 进行更改后,你都需要重新运行命令 prisma generate 去更新生成的 Prisma Client 代码。
    1. module 同步到数据库表中
npx prisma migrate dev --name=init

使用

Service 中使用 prisma 进行数据的增删改查

import { prisma, Prisma } from '@yunke/yunfly-plugin-prisma';

@Service()
export default class UserService {

  async createUser () {
    const data: Prisma.UserCreateArgs = {
      name: 'Alice',
      email: '[email protected]',
    }
    const newUser = await prisma.user.create({
      data,
    });
    return newUser;
  }

  async getUserList () {
    const users = await prisma.user.findMany();
    return users;
  }

}

提示: prisma 包含所有自定义 modulesTypescript 类型提示, 若 VS CODE 中没有类型提示时,可直接打开一次 node_modules/.prisma/index.d.ts 文件即可

config.prisma 配置说明

| 字段 | 类型 | 必填 | 说明 | | ---- | ---- | ---- | ---- | | enable | boolean | 是 | 是否开启插件 | | db | DbConfig | ((apolloConfig: ApolloConfig) => DbConfig) | 否 | 数据库配置 | | client | Object | 否 | prisma client 客户端配置项 |

db 配置说明

// interface 类型
interface PrismaConfig {
  db?: DbConfig | ((apolloConfig: ApolloConfig) => DbConfig);
  ...
}

interface DbConfig {
  url: string;
  databaseUrlKey?: string;
}

使用 Apollo

config.prisma 支持 apollo 配置:

  • 案例一
// 案例
config.prisma = {
  enable: true,
  db: `${apolloConfig['PRISMA-PROVIDER']}://${apolloConfig['PRISMA-USER']}:${apolloConfig['PRISMA-PASSWORD']}@${apolloConfig['PRISMA-HOST']}:${apolloConfig['PRISMA-PORT']}/${apolloConfig['PRISMA-DATABASE']}`
}
  • 案例二

为了提供更灵活的配置,db 参数支持函数模式,自己定制化函数内部逻辑。

config.prisma = {
  enable: true,
  db: (apolloConfig: ApolloConfig) => {
    return {
      url: `${apolloConfig['PRISMA-PROVIDER']}://` +
        `${apolloConfig['PRISMA-USER']}:` +
        `${apolloConfig['PRISMA-PASSWORD']}@` +
        `${apolloConfig['PRISMA-HOST']}:` +
        `${apolloConfig['PRISMA-PORT']}/` +
        `${apolloConfig['PRISMA-DATABASE']}`
    }
  }
}

config.client 配置说明

  • interface 类型说明
interface PrismaConfig {
  ......
  client?: {
    datasources?: Datasources;
    log?: Array<LogLevel | LogDefinition>;
    errorFormat?: ErrorFormat;
    rejectOnNotFound?: RejectOnNotFound | RejectPerOperation;
  }
}

| 字段 | 类型 | 说明 | | ---- | ---- | ---- | | datasources | Datasources | 数据源 参考地址 | | log| Array<LogLevel | LogDefinition> | 确定日志类型和级别 参考地址 | | errorFormat | ErrorFormat | 确定 Prisma 返回的错误级别和格式 参考地址 | | rejectOnNotFound| RejectOnNotFound | RejectPerOperation | 抛错说明 参考地址 |

prisma-init 命令行参数

prisma-init 命令行支持:--dev, --prod, --debug 三个指令

// 设置环境变量 NODE_ENV = dev,适合于开发环境
npx prisma-init --dev
// 设置环境变量 NODE_ENV =production
npx prisma-init --prod
// 设置环境变量 DEBUG = prisma-plugin 显示调试信息
npx prisma-init --dev --debug

Prisma cli 命令行参数说明

prisma init

初始化 prisma, 用于项目的第一次初始化操作, 它只需要执行一次, 它会在项目中创建一个 .env prisma/schema.prisma 的案例文件。当项目中已存在相关文件时,它会提示文件已存在。

// 默认初始化
npx prisma init

// 指定数据库初始化
npx prisma init --datasource-provider mysql

// 指定url进行初始化。 备注:它会检测数据库是否能链接成功
npx prisma init --url 'mysql://user:password@localhost:3306/mydb'

prisma generate

初始化 prisma 客户端代码, 它的核心能力是生成 Typescript 类型, 初始化 prisma 服务。 会在 node_modules/.prisma 下自动生成所有 modules 的类型文件, 方便开发人员开发, 提升开发效率。

// 默认初始化客户端代码,当modules有变动时需要重新执行此命令
npx prisma generate

// watch 模式生成客户端代码,当 prisma/schema.prisma 文件有改动时,会自动生成客户端代码
npx prisma generate --watch

prisma studio

图形化管理数据库数据,可以增删改查,不推荐使用,功能不够强大,推荐本地数据库管理工具,例如:Navicat

npx prisma studio

prisma migrate

Prisma模型创建迁移,将其应用于数据库, 它会同步 schema.prisma 中定义的 model 到数据库。

// 同步 model 到数据库,会创建 migrations 用于储存同步记录
npx prisma migrate dev

// 为当前迁移命名
npx prisma migrate dev --name=init

// 根据本地 migrations 文件下迁移记录充值 数据库
prisma migrate reset

// 为生产环境做数据同步
prisma migrate deploy

备注:

  1. 可以增加 --name=init 参数为当前迁移命名
  2. model 没有变化时,不会生成新的迁移
  3. 当删除本地 migrations 中迁移记录时,运行 reset 命令会删除数据库相关系信息,请慎重执行。

prisma db pull

从现有数据库中提取模式,更新Prisma模型

// 通过数据库表生成 schema.prisma 模型
npx prisma db pull

// 只在控制台打印生成的 schema.prisma
npx prisma db pull --print

// 强制覆盖本地定义的 model
npx prisma db pull --force

prisma db push

将Prisma模型状态推送到数据库

// 直接同步本地 model 到数据库中 (慎重操作:没有迁移记录,推荐使用 prisma migrate)
npx prisma db push
  • 命令行万能发 --help
npx prisma --help
npx prisma generate --help
npx prisma db pull --help

prisma 指令:参考文档