마이크로CMS와 Deno(Aleph.js)로 조금 더 미래의 WEB 사이트 개발

18095 단어 DenomicroCMStech
오늘은 미래 사이트 개발에 관한 이야기를 좀 하겠습니다.
하지만 어느 정도 형식적이기 때문에 그리 멀지 않은 미래일 수도 있다.
Aleph.js와 마이크로CMOS로 간단한 WEB 사이트를 만들어 봤다.
개발한 사이트는 다음과 같은 간단한 사이트다.
https://microcms-aleph.vercel.app/
이 글에서 소개한 Aleph.js는 현재 2021/7/3, v0입니다.3.0-alpha.33 및 알파 버전🙏

Deno 프레임 Aleph.js


이번에는 Deno제 SSG 프레임워크 Aleph입니다.js로 웹 페이지를 만들었습니다.Aleph.와 js는 Next입니다.이것은 js에서 지도를 받은 프레임워크로 문서의 구성도 매우 비슷하다(또는Next.js의 문서를 인용하여 만든 것이다).
https://alephjs.org/

microCMS


HeadlessCMS는 국산 CMS의 마이크로CMOS를 활용했다.최근 자바스크립트SDK를 개발해 개발이 용이해졌다.
https://microcms.io/
https://document.microcms.io/tutorial/javascript/javascript-sdk

Deno(Aleph.js)의 개발이 뭐가 그렇게 기뻐요?


Next.js풍 프레임


작성자는 평소 React(Next.js)를 사용합니다.Aleph.js는 Next입니다.js Instar이기 때문에 API 및 라우팅 방법도 Next입니다.js와 거의 똑같이 쓸 수 있습니다.물론 JSX로 개발할 수 있고, 평소 리액트를 사용하는 사람은 위화감 없이 개발할 수 있다.

Type Script 지원


Deno는 기본적으로 Type Script를 지원하므로 ts.config 등의 설정이 필요하지 않습니다.

node_modules 및 package제이슨 필요 없어요.


Deno가 npm을 사용하지 않았기 때문에 거대한 nodeDeno에는 module이 필요하지 않습니다.이것은 번역과 구축의 시간 단축에 큰 효과가 있다.
특히 SSG 프레임워크+HeadlessCMS 구성(이른바 Jamstack의 카테고리)은 구축 시간 문제를 일으키기 쉽다는 점이 큰 장점이다.
디노는 CDN을 이용해 Third Party Modules의 패키지를 보낸다.
https://deno.land/x
이외에도 ESM 등 CDN에 해당하는 npm pakage(기타는 skyppack 등)를 사용할 수 있다.
https://esm.sh/
이렇게 Aleph.지금α버전이지만 지금까지의 리소스를 활용하면서 잼택의 문제점을 해결하는 방법 중 하나가 될 수도 있다.

설정


그럼, 사실 Aleph.js와 마이크로CMOS를 사용하여 개발하는 방법을 소개합니다.
이번 디자인은 Vercel을 활용합니다.
brew 등을 사용하여 환경에 Deno를 설치하십시오.
https://deno.land/#installation
이번에 사용한 판본은 다음과 같다.
$ aleph --version
aleph.js 0.3.0-alpha.33
deno 1.11.2
v8 9.1.269.35
typescript 4.3.2
설치는 기본적으로 공식 Docs의 절차에 따라 진행된다.하지만 문서 버전에서는 이동할 수 없습니다.나는 위에 기재된 판본에 따라 진행하는 것이 비교적 좋다고 생각한다. (물론 이 보도의 방법은 앞으로 움직이지 않을 것이다.)
aleph.js 설치
deno install --unstable -A -f -n aleph https://deno.land/x/[email protected]/cli.ts
프로젝트의 창설
aleph init project
cd project
개발 모드에서 구축(HMR은 유효하다. 빌딩의 체감이 매우 빠르다)
aleph dev
이번 샘플의 창고는 다음과 같다.참조해주세요.요점만 따서 해설을 하다.
https://github.com/YouheiNozaki/microcms-aleph

Aleph.js의 개발 방법


디렉토리 구조


아래와 같이 src Dir로 설정할 수도 있습니다.
기본적으로 Next입니다.js와 같기 때문에 사용 경험이 있는 사람은 어색하지 않습니다.
project
 - .vscode(vscodeの設定ファイル)
 - dist(build時に作成されるファイル.Vercelではこのファイルを実行する)
 - components(コンポーネントのファイル)
 - lib(関数とか)
 - pages(Next.jsのFile Systemと同じくこのファイルがルーティングになる)
 - public(画像などの静的ファイル)
 - style(グローバルスタイルとか、pagesのスタイルとか)
 - types(typescriptの型定義ファイル)
 - .env(環境変数)
 - .gitignore
 - aleph.config.js(alephのビルド設定など。今回は使用しないがSSR,SSGの設定などはこのファイルで行う)
 - app.tsx(レイアウトファイル。Next.jsのapp.tsxと同じ)
 - import_map.json(importのURLを指定できる)
여기는 Aleph입니다.js 특유의 부분을 해설하다.
  • aleph.config.js
    이는 이번 기사에서 별다른 설정은 없지만, 페이지당 SSR과 SSG, 넥스트를 설정한다.js가 말한 getStaticPath 의 매개 변수 설정은 이 파일로 진행됩니다.
    https://alephjs.org/docs/basic-features/ssr-and-ssg
  • import_map.json
    앞서 말했듯이 Deno에서는 패키지를 가져올 때 CDN을 사용합니다.
    구체적으로 다음과 같이 포장 내용을 확인해야 한다.
  • import React from "https://esm.sh/[email protected]"
    
    이렇게 URL을 입력할 때마다 번거롭기 때문에 이 파일에 이 URL의 생략 설정을 적으세요.구체적으로 다음과 같다.
    {
     "imports": {
       "~/": "./",
       "aleph/": "https://deno.land/x/[email protected]/",
       "aleph/types": "https://deno.land/x/[email protected]/types.ts",
       "framework": "https://deno.land/x/[email protected]/framework/core/mod.ts",
       "framework/react": "https://deno.land/x/[email protected]/framework/react/mod.ts",
       "react": "https://esm.sh/[email protected]",
       "react-dom": "https://esm.sh/[email protected]",
       "microcms": "https://esm.sh/microcms-js-sdk"
     },
     "scopes": {}
    }
    
    이렇게 하면 포장 명칭만 기입하면 사용할 수 있다.
    import 문에서 VScode 오류가 발생하면 명령을 입력해 보십시오deno info [パッケージのURL]https://deno.land/manual/tools/dependency_inspector

    Microsoft와 협력


    https://github.com/YouheiNozaki/microcms-aleph
    다음은 창고의 개요를 소개한다.
    Next.js의 개발과 매우 비슷하기 때문에 아래의 마이크로CMS와 넥스트.js의 강좌를 이해할 수 있었으면 좋겠어요.
    https://blog.microcms.io/microcms-next-jamstack-blog/

    마이크로CMS Center 준비


    마이크로CMOS로 콘텐츠 API를 적절히 제작합니다.
    그나저나 이번에는 article API에서 다음과 같은 모드를 제작했다.
    {
        "id": "zenn6",
        "title": "nuxt.jsでChartグラフを作るチュートリアル",
        "url": "https://zenn.dev/ryusou/articles/nuxt-chartjs",
        "publish_article": "2021-04-05T15:00:00.000Z",
    }
    
    완성 후 마이크로cms-js-sdk를 사용하여 마이크로CMOS 데이터를 호출하는 설정을 합니다.
    https://github.com/microcmsio/microcms-js-sdk
    코드는 다음과 같습니다.
    lib/microcmsClient.ts
    import { createClient } from "microcms";
    
    export const microcmsClient = createClient({
      serviceDomain: "ryusou-portfolio",
      apiKey: `${Deno.env.get("X_API_KEY")}`,
    });
    
    서비스Domain에 xxxxx.microcms.io의 독립된 도메인 이름xxxx을 입력한 부분입니다.
    앱키는 지아이허브 등에 공개.env할 수 없기 때문에 파일 등에 저장된다.
    .env
    X_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxx
    
    노드의 process.env를 대체하여 값을 참조합니다.
    이렇게 하면 마이크로CMS에서 만든 API를 호출할 수 있다.SDK 덕분에 코드가 상당히 간소화되었습니다!

    호출 데이터

    Deno.env 다음과 같은 방식으로 데이터를 호출한다.
    pages/index.tsx
    import { useDeno } from "framework/react";
    import React from "react";
    import "../style/home.css";
    import { microcmsClient } from "../lib/microcmsClient.ts";
    
    export type Post = {
      contents: [{
        id: string;
        url: string;
        title: string;
        publish_article: string;
      }];
    };
    
    export default function Home() {
      const articles = useDeno(async () => {
        return await microcmsClient.get<Post>({
          endpoint: "articles",
          queries: { limit: 99 },
        });
      });
    
      return (
        <div className="page">
          <head>
            <title>Ryusou Profile</title>
          </head>
          <section>
            {articles.contents.map((content) => {
              return (
                <React.Fragment key={content.id}>
                  <a href={content.url} alt={content.title}>
                    <p>{content.title}</p>
                    <p>{content.publish_article}</p>
                  </a>
                </React.Fragment>
              );
            })}
          </section>
        </div>
      );
    }
    
    Aleph.js에서 pages/index.tsx를 사용하여 Data fetch를 진행합니다.Next입니다.js의 useDenogetStaticProps에 해당하는 기능.
    https://alephjs.org/docs/advanced-features/use-deno-hook
    React처럼 처리를 함수로 써서 직관적이고 좋은 인상을 줄 수 있다.이번에 사용한 것은 getServerSideProps이기 때문에 필요 없지만 microcms-js-sdk처럼 간단하게 반응할 수 있습니다.

    스타일


    문헌에 따르면 CSS를 쓰면 해시가 가능하다고 한다.js 형식으로 컴파일되었다고 쓰여 있지만 컨트롤러를 보니 useDeno<Type>(() => ....) 형식으로 표시되어 있었다.
    정말 module가 녹았나요, 잘 모르겠어요...알면 추기하다.
    https://alephjs.org/docs/basic-features/built-in-css-support

    프로그램 설계


    프로그램은 Vercel을 사용합니다.기본적으로 문서에 따라 설계할 수 있다.
    Build 명령의 aleph입니다.js 버전 조정
  • Output Dir를 dist
  • 로 설정
  • Vercel의 Environment Variables에 설정<style text/css data-module-id="style/index.css"/>을 잊지 마십시오.
  • 제휴 기트면 심플하게 디자인할 수 있을 것 같아요.

    총결산


    Deno의 SSG 프레임워크 Aleph입니다.js는 Next입니다.js처럼 처리할 수 있고 디노의 장점을 누릴 수 있어 향후 성능에 대한 기대가 높기 때문이다.
    앞으로 Deno의 발전을 기대합니다!!
    마이크로CMSX_API_KEY의 개발에 따라 코드를 더욱 간결하게 쓸 수 있습니다!또한 서비스 자체의 기능도 점점 충실해져 앞으로 더욱 기대됩니다!
    https://microcms.io/

    보태다


    개발 중인 설문 조사의 DenoTips

    formatter


    역시 갖고 싶구나.Denomicrocms-js-sdk에서 format 가능합니다.매우 빠르다.
    VS코드의 확장이 있다면 나는 매우 기쁠 것이다.
    추기: 설정하면 사용할 수 있다고 합니다.
    numb_86 메모 감사합니다.
    https://zenn.dev/ryusou/articles/alephjs-microcms#comment-66085d7787c6a8

    linter


    나는 사용하지 않았지만, 내 라인이 있다고 한다.
    https://zenn.dev/magurotuna/articles/66618f26475702

    좋은 웹페이지 즐겨찾기