# Como 'instalar' o Prisma?

Por
Araújo e Padovesi
Em 
Publicado 2023-09-24

# Configuração do Prisma CLI.

Primeiro adicione o pacote ao projeto:

pnpm add prisma --save-dev
bun add prisma --save-dev
npm install prisma --save-dev

Não. Só... não.

# Criar arquivos schema.prisma e .env

pnpm prisma init
bunx prisma init
npx prisma init

Não

.env: o arquivo para definir a URL de conexão do seu banco de dados.

prisma/schema.prisma: o arquivo de configuração principal para o seu projeto Prisma (incluirá o seu modelo de dados).

# Conectar o prisma ao seu banco de dados

A maneira mais fácil é usar o SQLite, pois é um banco de dados contido num arquivo, sem precisar instalar nada. Além disso, para limpar o banco de dados, basta deletar o arquivo .sqlite.

#.env

DATABASE_URL="file:./db.sqlite"

# Configuração do Prisma Client

Primeiro adicione o pacote ao projeto:

pnpm add @prisma/client
bun add @prisma/client
npm install @prisma/client

Não. Só... não.

# Instanciando um cliente prisma

Para podermos consumir/usar o banco de dados, precisamos instanciar um cliente. Como só deve ser instanciado um cliente por aplicação, é comum centralizarmos o código de instanciação em um único arquivo.

# Mínima

A forma mais simples de instanciar um novo cliente é:

// prisma/index.ts
import { PrismaClient } from "@prisma/client";

// exportando tipagens a partir desse arquivo
export * from "@prisma/client";

// exportando o cliente
export const prisma = new PrismaClient();

# Melhorada

A maneira anterior pode causar vazamento de memória em ambiente de desenvolvimento. Às vezes ao recarregar a aplicação, que acontece quando salvamos um arquivo, o código que gera o cliente é rodado outra vez. Isso pode acabar gerando várias instâncias.

// prisma/index.ts
import { PrismaClient } from "@prisma/client";

export * from "@prisma/client";

// globalThis é palavra chave para uma variável global em JS
// a passagem é por referência quando usamos objeto
const globalForPrisma = globalThis as { prisma?: PrismaClient };

export const prisma =
  globalForPrisma.prisma ||
  new PrismaClient({
    log:
      process.env.NODE_ENV === "development"
        ? ["query", "error", "warn"]
        : ["error"],
  });

// se não estiver em ambiente de produção, guarde a instância na variável global
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;

# Quer saber mais Prisma ORM ?

----------------->Documentação oficial do Prisma.<--------------------

# Configurar banco de dados PostgreSQL usando o Docker

Caso queira usar PostgreSQL em desenvolvimento, pode utilizar esta seção como referência para a criação do docker-compose.yml e sua utilização com Prisma.

Caso não saiba o que é docker, e essa documentação não esteja no retype ainda, veja no gitbook antigo

É importante ressaltar que nesse passo o Docker está sendo utilizado como um 'simulador' de banco de dados PostgreSQL.

# Criando arquivo docker-compose.yml

touch docker-compose.yml

# Adicionando a configuração no arquivo docker-compose.yml

# teste/docker-compose.yml

version: '3'
services:
  postgres:
    image: postgres:latest
    container_name: postgresql
    environment:
      POSTGRES_DB: teste
      POSTGRES_USER: teste
      POSTGRES_PASSWORD: teste
    ports:
      - "5436:5432"
    volumes:
      - ./dados_postgres:/var/lib/postgresql/data

# Definir localização do seu banco de dados

Considerando as variáveis usadas no docker,

  • POSTGRES_DB = nome do banco de dados = teste
  • POSTGRES_USER = usuario definido no docker-compose.yml = teste
  • POSTGRES_PASSWORD = senha definida no docker-compose.yml = teste

No seu arquivo de ambiente .env, declare a URL do banco de dados, substituindo os termos entre chaves, {var}, por seus respectivos valores:

#.env

DATABASE_URL="postgresql://{POSTGRES_USER}:{POSTGRES_PASSWORD}@localhost:5432/{POSTGRES_DB}"
#substituindo no exemplo, ficaria
# DATABASE_URL="postgresql://teste:teste@localhost:5432/teste"

# Inicie o Docker

sudo service docker start

# Inicie o container do banco de dados PostgreSQL

sudo docker-compose up -d

# Verifique se o banco de dados está sendo executado

sudo docker ps