종속 항목 처리

함수에서 외부 Node.js 모듈 및 로컬 데이터를 사용할 수 있습니다. Node.js의 종속 항목은 npm으로 관리되며 package.json이라는 메타데이터 파일로 표현됩니다. Cloud Functions Node.js 런타임은 npm, yarn, pnpm을 사용한 설치를 지원합니다.

함수의 종속 항목을 지정하려면 이를 package.json 파일에 추가합니다.

이 예시에서 종속 항목은 package.json 파일에 나열됩니다.

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

그런 다음 함수에서 종속 항목을 가져옵니다.

자바스크립트

const escapeHtml = require('escape-html');

// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});

TypeScript

import * as escapeHtml from 'escape-html';

// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}

로컬 Node.js 모듈 포함

로컬 Node.js 모듈을 함수의 일부분으로 포함할 수도 있습니다. file: 프리픽스를 사용하여 package.json에서 모듈을 선언하면 됩니다. 다음 예시에서 mymodule은 모듈 이름을 나타내고 mymoduledir은 모듈이 포함된 디렉터리입니다.

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

이 로컬 모듈의 코드는 함수의 루트 디렉터리에 있는 node_modules 폴더가 아닌 다른 위치에 저장해야 합니다.

TypeScript용 추가 단계

TypeScript는 유형 정보가 있는 라이브러리를 사용할 때 가장 유용합니다. 이러한 라이브러리를 사용하면 TypeScript가 구문 오류를 포착할 수 있으며 편집기가 향상된 자동 완성 추천을 제공합니다. firebase-adminfirebase-functions와 같은 일부 라이브러리에는 TypeScript 정의가 포함되어 있습니다.

많은 라이브러리가 자체 TypeScript 정의를 제공하지 않습니다. DefinitelyTyped 프로젝트는 가장 많이 사용되는 노드 라이브러리에 대한 정의를 제공하며 커뮤니티에서 유지관리합니다. DefinitelyTyped가 동일한 NPM 패키지 이름을 사용하되 '@types' 조직 내에 이러한 정의를 게시합니다. 예를 들어 다음 명령어를 사용하여 uuid 라이브러리의 유형 정보를 설치할 수 있습니다.

npm install @types/uuid

TypeScript에 더 익숙해지면 두 설치 항목을 결합할 수도 있습니다.

npm install uuid @types/uuid

유형 종속 항목과 라이브러리 종속 항목은 유형이 같아야 합니다. 예를 들어 uuid는 일반 종속 항목으로, @types/uuid는 개발 종속 항목이나 피어 종속 항목으로 저장해서는 안 됩니다.

Node.js 모듈 로드

Node.js require() 함수를 사용하여 이전에 설치한 Node.js 모듈을 로드합니다. 또한 require() 함수를 사용하면 함수와 함께 배포하는 로컬 파일을 가져올 수 있습니다.

TypeScript로 함수를 작성할 때는 설치한 Node.js 모듈을 로드하는 것과 동일한 방식으로 import 문을 사용하세요.

비공개 모듈 사용

함수 디렉터리의 .npmrc 파일에서 레지스트리로 인증하기 위한 설정을 제공하여 비공개 npm 모듈을 사용할 수 있습니다. Yarn v2 이상을 패키지 관리자로 사용하는 경우 파일 이름은 .yarnrc.yml입니다.

Artifact Registry의 비공개 모듈

Artifact Registry Node.js 패키지 저장소에서 함수의 비공개 모듈을 호스팅할 수 있습니다. Google Cloud Functions 함수를 배포하면 빌드 프로세스에서 Cloud Build 서비스 계정의 Artifact Registry 사용자 인증 정보가 자동으로 생성됩니다. 추가 사용자 인증 정보를 생성하지 않고 .npmrc에 Artifact Registry 저장소를 나열하기만 하면 됩니다. 예를 들면 다음과 같습니다.

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

이 방식은 Yarn v1 패키지 관리자에도 적용됩니다. Yarn v2 이상을 사용하는 경우 추가 사용자 인증 정보 없이 .yarnrc.yml에 Artifact Registry 저장소를 나열하기만 하면 됩니다. 예를 들면 다음과 같습니다.

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

다른 저장소의 비공개 모듈

npm 문서에서는 커스텀 읽기 전용 액세스 토큰을 만드는 방법에 대해 설명합니다. 홈 디렉터리에서 생성된 .npmrc 파일에는 읽기/쓰기 토큰이 포함되어 있으므로 이 파일은 사용하지 않는 것이 좋습니다. 배포 중에는 쓰기 권한이 필요 없으며 보안 위험을 초래할 수 있습니다.

비공개 저장소를 사용하지 않는 경우 함수 배포 시간이 늘어날 수 있으므로 .npmrc 파일을 포함하지 마세요.

파일 형식

.npmrc 파일을 사용하여 커스텀 인증 토큰을 설정하는 경우 아래에 표시된 줄을 포함해야 합니다.

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

다음과 같이 바꿉니다.

  • REGISTRY_DOMAIN: 비공개 npm 레지스트리의 도메인 이름입니다. 저장소가 npmjs.org로 호스팅되는 경우 이 필드를 registry.npmjs.org로 설정합니다.
  • AUTH_TOKEN: npm 레지스트리의 인증 토큰입니다. 토큰의 리터럴 텍스트 값 또는 npm이 환경의 실제 토큰 값으로 대체하는 텍스트 문자열 ${NPM_TOKEN}일 수 있습니다.

    gcloud functions deploy 명령어에 --set-build-env-vars 인수를 사용하여 $NPM_TOKEN 환경 변수를 설정할 수 있습니다. NPM 인증 토큰에 관한 자세한 내용은 비공개 모듈에 대한 NPM 튜토리얼을 참조하세요.