Una función puede utilizar módulos externos de Node.js, así como datos locales. Las dependencias en Node.js se administran con npm y se expresan en un archivo de metadatos llamado package.json
. Los tiempos de ejecución de Cloud Functions Node.js admiten la instalación mediante npm , Yarn o pnpm .
Para especificar una dependencia para su función, agréguela a su archivo package.json
.
En este ejemplo, se enumera una dependencia en el archivo package.json
:
{
"dependencies": {
"escape-html": "^1.0.3"
}
}
Luego, la dependencia se importa en la función:
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')}!`);
});
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')}!`);
}
Incluyendo módulos locales de Node.js
También puede incluir módulos locales de Node.js como parte de su función. Puede lograr esto declarando su módulo en package.json
usando el file:
prefijo . En el siguiente ejemplo, mymodule
se refiere al nombre de su módulo y mymoduledir
es el directorio que contiene su módulo:
{
"dependencies": {
"mymodule": "file:mymoduledir"
}
}
El código para este módulo local debe almacenarse en algún lugar que no sea la carpeta node_modules
dentro del directorio raíz de su función.
Pasos adicionales para TypeScript
TypeScript le ayuda más cuando utiliza bibliotecas que tienen información de tipo. Esto permite que TypeScript detecte errores de sintaxis y permite a los editores brindarle mejores sugerencias de autocompletar. Algunas bibliotecas, como firebase-admin
y firebase-functions
, se envían con definiciones de TypeScript incluidas.
Muchas bibliotecas no proporcionan su propia definición de TypeScript. El proyecto DefinitelyTyped proporciona definiciones mantenidas por la comunidad para las bibliotecas de nodos más populares. DefinitelyTyped publica estas definiciones con el mismo nombre de paquete NPM, pero dentro de la organización "@types". Por ejemplo, puede instalar la información de tipo para la biblioteca uuid
con lo siguiente:
npm install @types/uuid
A medida que te familiarices con TypeScript, es posible que te encuentres combinando ambas instalaciones:
npm install uuid @types/uuid
Las dependencias de tipo deben ser del mismo tipo que la dependencia de la biblioteca. Por ejemplo, no debe guardar uuid
como una dependencia normal y @types/uuid
como una dependencia de desarrollo o de pares.
Cargando módulos de Node.js
Utilice la función require()
de Node.js para cargar cualquier módulo de Node.js que haya instalado. También puede utilizar la función require()
para importar archivos locales que implemente junto con su función.
import
de la misma manera para cargar cualquier módulo de Node.js que haya instalado.Usando módulos privados
Puede utilizar un módulo npm privado proporcionando configuraciones para la autenticación con el registro en un archivo .npmrc
en el directorio de la función. Si está utilizando Yarn v2 o superior como administrador de paquetes, este archivo se llama .yarnrc.yml
.
Módulos privados de Artifact Registry
Un repositorio de paquetes Artifact Registry Node.js puede alojar módulos privados para su función. Cuando implementas una función de Google Cloud Functions, el proceso de compilación genera automáticamente credenciales de Artifact Registry para la cuenta del servicio Cloud Build . Solo necesita incluir el repositorio de Artifact Registry en su .npmrc
sin generar credenciales adicionales. Por ejemplo:
@SCOPE :registry=https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
//REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME :always-auth=true
Este enfoque también funciona para el administrador de paquetes Yarn v1. Si está utilizando Yarn v2 o superior, solo necesita incluir el repositorio de Artifact Registry en su .yarnrc.yml
sin credenciales adicionales. Por ejemplo:
npmScopes:
SCOPE :
npmRegistryServer: https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
npmAlwaysAuth: true
Módulos privados de otros repositorios
La documentación de npm explica cómo crear tokens de acceso personalizados de solo lectura. No recomendamos el uso del archivo .npmrc
creado en el directorio de inicio porque contiene un token de lectura y escritura. No se requieren permisos de escritura durante la implementación y podrían suponer un riesgo para la seguridad.
No incluya el archivo .npmrc
si no utiliza repositorios privados, ya que puede aumentar el tiempo de implementación de sus funciones.
Formato de archivo
Si está utilizando un archivo .npmrc
para configurar un token de autenticación personalizado, debe incluir la línea que se muestra a continuación.
//REGISTRY_DOMAIN /:_authToken=AUTH_TOKEN
Reemplazar:
- REGISTRY_DOMAIN : el nombre de dominio de su registro npm privado. Si su repositorio está alojado en
npmjs.org
, establezca este campo enregistry.npmjs.org
. AUTH_TOKEN : el token de autorización para su registro npm. Puede ser el valor de texto literal del token o la cadena de texto
${NPM_TOKEN}
, quenpm
reemplaza con el valor del token real del entorno.Puedes configurar la variable de entorno
$NPM_TOKEN
con el argumento--set-build-env-vars
en tu comandogcloud functions deploy
. Consulte el tutorial de NPM sobre módulos privados para obtener más detalles sobre el token de autenticación de NPM.
Construya su función con dependencias proporcionadas
Las dependencias proporcionadas son aquellas cuyo código fuente se incluye directamente en su paquete de código fuente y se reconstruye junto con su propio código. Usted crea dependencias suministradas de Node.js y omite su instalación durante la implementación mediante la variable de entorno de compilación GOOGLE_VENDOR_NPM_DEPENDENCIES.
Requisitos previos para las dependencias proporcionadas
Asegúrese de tener una función funcional con todas las dependencias que desea que el proveedor defina en su archivo
package.json
.Instale estas dependencias localmente ejecutando
npm install
Elimine
node_modules
del archivo .gcloudignore en su directorio de trabajo.Implemente la función, asegurándose de que su versión local de Node.js sea la misma que la que especificó durante la implementación.
Implemente su función y las dependencias proporcionadas con el siguiente comando:
gcloud functions deploy
FUNCTION_NAME \
--runtimeRUNTIME_NAME \
--set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=trueReemplazar:
- FUNCTION_NAME : el nombre de la función de Cloud Functions que estás implementando
- RUNTIME_NAME : el nombre del tiempo de ejecución de Node.js bajo el cual ejecutar la función implementada. Esta debe ser la misma versión de Node.js que usó en su entorno de desarrollo local.
El paquete de marco de funciones es una dependencia necesaria para las funciones. Para compilaciones más rápidas, recomendamos vender este paquete. Si no lo hace, se descarga e instala cuando se crea la función.
Si especifica un motor npm en el archivo package.json, la versión especificada de npm se descarga en el momento de la compilación. Para suprimir este comportamiento, elimínelo de su archivo package.json.