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方式部署
能力进行部署。