Las funciones pueden usar módulos de Node.js externos y 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 Node.js para Cloud Functions
admiten la instalación mediante npm,
yarn o pnpm.
Si quieres especificar una dependencia para tu función, agrégala al archivo package.json
.
En este ejemplo, se incluye una dependencia en el archivo package.json
:
{ "dependencies": { "escape-html": "^1.0.3" } }
Luego, la dependencia se importa en la función:
JavaScript
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')}!`);
}
Incluye módulos locales de Node.js
También puedes incluir módulos locales de Node.js como parte de tu función. Para ello, declara el módulo en package.json
mediante el prefijo file:
. En el siguiente ejemplo, mymodule
hace referencia al nombre del módulo y mymoduledir
es el directorio que contiene el módulo:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
El código de este módulo local debe almacenarse en un lugar que no sea la carpeta node_modules
dentro del directorio raíz de la función.
Pasos adicionales para TypeScript
TypeScript te ayuda mucho más cuando usas bibliotecas que tienen información sobre tipos.
Esto permite que TypeScript detecte errores de sintaxis y que los editores te ofrezcan mejores sugerencias de autocompletado. Algunas bibliotecas, como firebase-admin
y firebase-functions
, se envían con las definiciones de TypeScript incluidas.
Muchas bibliotecas no proporcionan definiciones de TypeScript. El proyecto DefinitelyTyped proporciona definiciones con mantenimiento de la comunidad para las bibliotecas de nodos más populares.
DefinitelyTyped publica estas definiciones con el mismo nombre del paquete NPM, pero
dentro de la organización “@types”. Por ejemplo, puedes usar este comando a fin de instalar la información sobre tipos para la biblioteca uuid
:
npm install @types/uuid
Cuando estés más familiarizado con TypeScript, podrás combinar ambas instalaciones:
npm install uuid @types/uuid
Las dependencias de tipo deberían ser del mismo tipo que las de la biblioteca. Por ejemplo, no deberías guardar uuid
como una dependencia normal y @types/uuid
como una dependencia de desarrollo o de par.
Carga módulos de Node.js
Usa la función require()
de Node.js para cargar cualquier módulo de Node.js que instales. También puedes usar la función require()
para importar archivos locales que implementes junto con tu función.
import
de la misma forma para cargar los módulos de Node.js que tengas instalados.Usa módulos privados
Para usar un módulo de npm privado, proporciona la configuración para autenticarte con
el registro en un archivo .npmrc
en el directorio de la función. Si usas Yarn v2 o una versión superior como administrador de paquetes, este archivo se llamará .yarnrc.yml
.
Módulos privados de Artifact Registry
Un repositorio de paquetes de Node.js en Artifact Registry
puede alojar módulos privados para tu función. Cuando implementas una Google Cloud Function, el proceso de compilación genera de forma automática las credenciales de Artifact Registry para la cuenta de servicio de Cloud Build.
Solo necesitas agregar a una lista el repositorio de Artifact Registry en tu archivo .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 de Yarn v1.
Si usas Yarn v2 o una versión posterior, solo debes agregar a una lista el repositorio de Artifact Registry
en tu .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
En la documentación de npm se explica cómo crear tus propios tokens de acceso de solo lectura. No recomendamos el uso del archivo .npmrc
que se creó en el directorio principal porque contiene un token de lectura/escritura. No se necesitan permisos de escritura para el proceso de implementación. Además, podrían poner en riesgo la seguridad.
No incluyas el archivo .npmrc
si no usas repositorios privados,
ya que puede aumentar el tiempo de implementación de tus funciones.
Formato de archivo
Si usas un archivo .npmrc
para definir un token de autenticación personalizado, el archivo debe incluir la línea que se muestra a continuación.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Reemplaza lo siguiente:
- REGISTRY_DOMAIN es el nombre de dominio de tu registro privado de npm. Si tu repositorio está alojado en
npmjs.org
, establece este campo enregistry.npmjs.org
. AUTH_TOKEN: es el token de autorización para tu registro de npm. Puede ser el valor de texto literal del token o la cadena de texto
${NPM_TOKEN}
, quenpm
reemplaza por el valor del token real del entorno.Puedes establecer la variable de entorno
$NPM_TOKEN
con el argumento--set-build-env-vars
en el comandogcloud functions deploy
. Consulta el instructivo de NPM sobre los módulos privados para obtener más información sobre el token de autenticación de NPM.
Crea tu función con dependencias de proveedores
Las dependencias de vendoring son aquellas cuyos orígenes se incluyen directamente en tu paquete de código fuente y que vuelven a compilarse junto con tu propio código. Crea dependencias de vendoring de Node.js y evita tener que instalarlas durante su implementación mediante la variable de entorno de compilación GOOGLE_VENDOR_NPM_DEPENDENCIES.
Requisitos previos para dependencias de proveedores
Asegúrate de tener una función de trabajo con todas las dependencias que deseas definir del proveedor en tu archivo
package.json
.Instala estas dependencias de manera local al ejecutar:
npm install
Quita
node_modules
del archivo .gcloudignore en tu directorio de trabajo.Implementa la función para asegurarte de que tu versión local de Node.js sea la misma que especificaste durante la implementación.
Implementa tu función y las dependencias del proveedor con el siguiente comando:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Reemplaza lo siguiente:
- FUNCTION_NAME: Es el nombre de la función Cloud Functions que estás implementando.
- RUNTIME_NAME: El nombre del entorno de ejecución de Node.js en el que ejecutarás la función implementada. Debe ser la misma versión de Node.js que usaste en tu entorno de desarrollo local
El paquete de Functions Framework es una dependencia obligatoria para las funciones. Para compilaciones más rápidas, recomendamos usar este paquete. Si no lo haces, se descarga e instala cuando se compila la función.
Si especificas un motor de npm en el archivo package.json, se descarga la versión especificada de npm en el tiempo de compilación. Para suprimir este comportamiento, quítalo de tu archivo con package.json.