Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
June 17, 2022 04:59 am GMT

Jamstack in Action

Herramientas:

Requisitos:

  • Ganas de aprender

Objetivo:
Veras en accin con este rpido tutorial practico las mejores herramientas para desarrollar sitios de ultima generacin. Escalables, resilientes y de fcil desacople. Desde 0 a produccin.

Repositorio. Por si te llegas a perder en el camino

Dar por sentado que ya saben que pueden seguir este tutorial con npm, yarn o pnpm; que ya cuentas con Node.js instalado y que haz trabajado con este runtime anteriormente.

Esto no significa que no puedas comentar tus dudas. La comunidad es muy grande y mas de uno te vamos a poder ayudar si te atoras con algo o quieres profundizar un poco ms.

Que es Jamstack?

Jamstack es una arquitectura diseada para que la web sea ms rpida, ms segura y ms fcil de escalar. Se basa en muchas de las herramientas y flujos de trabajo que los desarrolladores adoran y que aportan la mxima productividad.

Los principios bsicos de pre-renderizacin y desacoplamiento permiten que los sitios y las aplicaciones se entreguen con mayor confianza y resistencia que nunca.

Let's do it

Iniciaremos creando todo lo necesario para nuestro proyecto.
Dejare enlaces a la documentacin por si quieren profundizar un poco mas pero este tutorial puede ser seguido 100% desde aqu.

Next.js

El framework de react para produccion. Next.js le brinda la mejor experiencia de desarrollador con todas las funciones que necesita para la produccin: renderizado hbrido esttico y de servidor, compatibilidad con TypeScript, agrupacin inteligente, bsqueda previa de ruta y ms. No se necesita configuracin.
Doc

$ yarn create next-app jamstack-2022 --typescript

Tailwind

Cree rpidamente sitios web modernos sin tener que abandonar su HTML. Un marco CSS de primera utilidad repleto de clases como flex, pt-4, text-center y giratorio-90 que se pueden componer para crear cualquier diseo, directamente en su marcado.
Doc

$ yarn add -D tailwindcss postcss autoprefixer$ yarn tailwindcss init -p
// tailwind.config.js/** @type {import('tailwindcss').Config} */module.exports = {  content: [    "./pages/**/*.{js,ts,jsx,tsx}",    "./components/**/*.{js,ts,jsx,tsx}",  ],  theme: {    extend: {},  },  plugins: [],}
/* styles/globals.css */@tailwind base;@tailwind components;@tailwind utilities;

Puedes borrar styles/Home.module.css

Prisma

Cree e itere aplicaciones de JavaScript y TypeScript basadas en datos en menos tiempo.
Doc
VSCode extention

$ yarn add -D prisma$ yarn prisma init$ yarn add @prisma/client

Haremos un pequeo ajuste en la DB que usaremos. Puedes usar la que quieras. Para fines prcticos usaremos SQLite. Si te interesa un tutorial con Mongo Atlas, Planet Scale (MySQL), Cockroach (Postgres) con Docker. Hzmelo saber en los comentarios.

// prisma/schema.prismagenerator client {  provider = "prisma-client-js"}datasource db {  provider = "sqlite"  url      = env("DATABASE_URL")}
; .envDATABASE_URL="file:./dev.db"

Usaremos las mejores practicas de Prisma + Next.js en tiempo de desarrollo.

// lib/prisma.ts// globals.d.tsimport { PrismaClient } from '@prisma/client'declare module global {    let prisma: PrismaClient;}let prisma: PrismaClient;if (process.env.NODE_ENV === 'production') {    prisma = new PrismaClient()} else {    if (!global.prisma) {        global.prisma = new PrismaClient({ log: ['info', 'query'] })    }    prisma = global.prisma}export default prisma;

Next Auth

Autenticacin para Next.js. Cdigo abierto. Full Stack. Seguro por defecto. Eres dueo de tus datos.
Doc

$ yarn add next-auth @next-auth/prisma-adapter
// prisma/schema.prismagenerator client {  provider = "prisma-client-js"}datasource db {  provider = "sqlite"  url      = env("DATABASE_URL")}model Account {  id                String  @id @default(cuid())  userId            String  type              String  provider          String  providerAccountId String  refresh_token     String?  access_token      String?  expires_at        Int?  token_type        String?  scope             String?  id_token          String?  session_state     String?  user User @relation(fields: [userId], references: [id], onDelete: Cascade)  @@unique([provider, providerAccountId])}model Session {  id           String   @id @default(cuid())  sessionToken String   @unique  userId       String  expires      DateTime  user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)}model User {  id            String    @id @default(cuid())  name          String?  email         String?   @unique  emailVerified DateTime?  image         String?  accounts      Account[]  sessions      Session[]}model VerificationToken {  identifier String  token      String   @unique  expires    DateTime  @@unique([identifier, token])}
// pages/_app.tsximport '../styles/globals.css'import type { AppProps } from 'next/app'import { SessionProvider } from "next-auth/react"export default function App({  Component,  pageProps: { session, ...pageProps },}: AppProps) {  return (    <SessionProvider session={session}>      <Component {...pageProps} />    </SessionProvider>  )}
// pages/api/auth/[...nextauth].tsimport NextAuth from "next-auth"import GoogleProvider from "next-auth/providers/google"import { PrismaAdapter } from "@next-auth/prisma-adapter"import prisma from './../../../lib/prisma'export default NextAuth({  adapter: PrismaAdapter(prisma),  providers: [    GoogleProvider({      clientId: process.env.GOOGLE_CLIENT_ID as string,      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,    }),  ],})

Comenta si quieres ver como ligar otros servicios o consulta directamente la doc de Next-Auth.

Para crear las credenciales para google como proveedor lo puedes hacer desde la consola de GCP.
Algo asi deberia de verse:
Image description

; .envDATABASE_URL="file:./dev.db"GOOGLE_CLIENT_ID=<Lo que te tire GCP console>GOOGLE_CLIENT_SECRET=<Lo que te tire GCP console>
// pages/index.tsximport { useSession, signIn, signOut } from "next-auth/react"export default function Component() {  const { data: session } = useSession()  if (session) {    return <>      <p>Signed in as <span className='font-bold'>{session!.user!.email}</span></p>      <button onClick={() => signOut()} className='bg-blue-500 py-1 px-3 text-white rounded'>Sign out</button>    </>  }  return <>    <p>Not signed in</p>    <button onClick={() => signIn()} className='bg-blue-500 py-1 px-3 text-white rounded'>Sign in</button>  </>}

A echarlo a volar

Generamos la base de datos

$ yarn prisma db push

Iniciamos el proyecto

$ yarn start

Y listo, tienes tu proyecto con las mejores y mas nuevas tecnologas. Pero que dices? lo llevamos un poco mas all?

Mucha suerte en tus proyectos y Happy Hacking


Original Link: https://dev.to/ushieru/jamstack-in-action-4b2l

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To