함수에서 외부 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-admin
및 firebase-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()
함수를 사용하면 함수와 함께 배포하는 로컬 파일을 가져올 수 있습니다.
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 튜토리얼을 참조하세요.