Database

Prisma

Malagu 提供了 Prisma 数据库访问框架的支持。

在本地调试的时候可以参照 官方教程 引入,引入后在打包前可以正常使用,具体步骤如下。

安装 Prisma

yarn add prisma

初始化 Prisma

npx prisma init

连接数据库

// schema.prisma
datasource db {
    provider = "postgresql" // 可以选择如Mysql等其他数据库
    url = "postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
}

generator client {
    provider = "prisma-client-js"
    output = "../prisma-client"
    binaryTargets = ["darwin", "rhel-openssl-1.0.x"]
}

binaryTargets 需要根据部署的目标平台的架构选择不同的引擎, 参考文档

安装 Prisma Client

yarn add @prisma/client

生成 Prisma Client

npx prisma generate

创建迁移

npx prisma migrate dev --name init

使用 Prisma

import { PrismaClient } from "../prisma-client";
// 如果指定了导出地址,这里需要指定为导出地址

const prisma = new PrismaClient();

async function main() {
  await prisma.user.create({
    data: {
      name: "Alice",
      email: "alice@prisma.io",
      posts: {
        create: { title: "Hello World" },
      },
    },
  });
}

上述使用到的 schema

打包发布

发布的时候 Prisma Client 和 Prisma Schema 默认不会打包,所以需要 webpack 插件,参考如下示例。

创建 src/hooks/webpack.ts hook 文件

关于 Webpack Hook,请查看:Webpack 插件

src/hooks/webpack.ts
import { ConfigurationContext, WebpackContext } from "@malagu/cli-service/lib/context/context-protocol";
import { PathUtil } from "@malagu/cli-common/lib/utils/path-util";

export default async (context: WebpackContext) => {
  const { configurations } = context;
  const config = ConfigurationContext.getBackendConfiguration(configurations);
  if (config) {
    const CopyPlugin = require("copy-webpack-plugin");
    const to = PathUtil.getProjectHomePath();
    config.plugin("copyPrisma").use(CopyPlugin, [
      {
        patterns: [
          {
            from: "your project path" + "/prisma",
            to: to + "/dist/prisma",
          },
          {
            from: "your project path" + "/prisma-client",
            to: to + "/dist/prisma-client",
          },
        ],
      },
    ]);
  }
};

使用 COS 方式部署代码

因为 Prisma 生成的 client 体积非常大,使用直接上传代码包的方式上传的话,可能会超出接口限制,建议使用 malagu 的通过COS方式部署能力进行部署。


Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号