Especificar versiones de Node.js
El proyecto buildpacks ofrece asistencia para las versiones LTS actuales y activas de Node.js. Hay versiones anteriores de Node.js disponibles, pero es posible que el proyecto no las mantenga activamente.
Estás usando package.json
Puedes especificar la versión de Node.js de tu aplicación durante la implementación configurando el campo engines.node
en package.json
. Para configurar el paquete de compilación de forma que use la versión más reciente de Node.js v16 al implementar tu aplicación, puedes usar los siguientes valores en tu package.json
:
"engines": {
"node": "16.x.x"
}
Estás usando GOOGLE_NODEJS_VERSION
También se puede especificar la versión de Node.js mediante la variable de entorno GOOGLE_NODEJS_VERSION
.
Si se definen ambas configuraciones, el valor de GOOGLE_NODEJS_VERSION
tiene prioridad sobre la propiedad engines.node
. Si no se proporciona ningún valor, se usará la versión LTS más reciente de Node.js.
Para configurar el paquete de compilación para que use Node.js 16 al desplegar tu aplicación, sigue estos pasos:
pack build --builder=gcr.io/buildpacks/builder \
sample-functions-framework-node \
--env GOOGLE_NODEJS_VERSION=16.x.x
También puedes usar un descriptor de proyecto project.toml
para codificar la variable de entorno junto con los archivos de tu proyecto. Consulta las instrucciones para compilar la aplicación con variables de entorno.
Consejos
- El campo
engines.node
puede aceptar una restricción de semver. La biblioteca específica que usamos para los buildpacks de Node.js es Masterminds/semver. - No uses especificadores de mayor que (>) en
engines.node
- Al desplegar la aplicación en el entorno estándar de App Engine, la propiedad
engines.node
debe ser compatible con el tiempo de ejecución especificado enapp.yaml
. - Puedes consultar documentación adicional sobre la opción de configuración
engines.node
enpackage.json
en la documentación oficial de NPM, en el tema de los motores. - Al desplegar una función en Cloud Run Functions, la propiedad
engines.node
debe ser compatible con el tiempo de ejecución usado para desplegar la función.
Instalar dependencias
Usar NPM
- NPM es el gestor de paquetes predeterminado.
- Siempre que sea posible, utilice
package-lock.json
para mejorar el rendimiento de la caché. - De forma predeterminada, solo se instalan las dependencias de producción.
- Puedes especificar la sección de la versión de npm mediante el campo
engines.npm
en el archivopackage.json
.
Usar Yarn
- Yarn se usa en su lugar cuando incluye el archivo
yarn.lock
en su proyecto. - Puedes especificar la versión de Yarn que quieres usar en el campo
engines.yarn
de tu archivopackage.json
. - Admitimos el modo PnP de Yarn 2 si tu proyecto incluye un
.yarn/cache
.
Usar Pnpm
- Pnpm se usa en su lugar cuando incluyes el archivo
pnpm-lock.yaml
en tu proyecto. - Puedes especificar una versión de pnpm en el campo
engines.pnpm
de tu archivopackage.json
. - Para ver un ejemplo práctico, consulta la aplicación sample-node-pnpm.
Usar módulos privados
Puedes usar un módulo npm privado proporcionando la configuración para autenticarte con el registro en un archivo .npmrc
del directorio de la función. Si usas Yarn 2 o una versión posterior como gestor de paquetes, este archivo se llama .yarnrc.yml
.
Módulos privados de Artifact Registry
Un repositorio de paquetes de Node.js de Artifact Registry
puede alojar módulos privados para tu función. Cuando despliega una función de Buildpacks, el proceso de compilación genera automáticamente credenciales de Artifact Registry para la cuenta de servicio de Cloud Build.
Solo tienes que incluir el repositorio de Artifact Registry en tu archivo .npmrc
cuando uses la versión 1 de npm o Yarn. Por ejemplo, si usas NPM o Yarn versión 1:
@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true
Si usas Yarn versión 2 o posterior, solo tienes que incluir el repositorio de Artifact Registry en tu archivo .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 tokens de acceso de solo lectura personalizados. No recomendamos usar el archivo .npmrc
creado en el directorio principal porque contiene un token de lectura y escritura. Los permisos de escritura no son necesarios durante la implementación y podrían suponer un riesgo de 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, debe incluir la línea que se muestra a continuación.
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
Sustituye:
- REGISTRY_DOMAIN: el nombre de dominio de tu registro privado de npm. Por ejemplo, si el host de tu repositorio es
npmjs.org
, asigna el valorregistry.npmjs.org
a este campo. AUTH_TOKEN: el token de autorización de tu registro de npm. Puede ser el valor de texto literal del token o la cadena de texto
${NPM_TOKEN}
, que el comandonpm
sustituye por el valor del token real del entorno.Puedes definir la variable de entorno
$NPM_TOKEN
con el argumento--set-build-env-vars
del comandogcloud functions deploy
. Para obtener más información sobre el token de autenticación de NPM, consulta el tutorial de NPM sobre módulos privados.
Ejecutar pasos de compilación personalizados durante la implementación
De forma predeterminada, npm run build
se ejecuta si se especifica una secuencia de comandos en el archivo package.json
. Sin embargo, puedes especificar pasos de compilación personalizados para anular el comportamiento predeterminado y ejecutar solo las secuencias de comandos que quieras durante la compilación. Puedes controlar los pasos de compilación mediante la variable de entorno GOOGLE_NODE_RUN_SCRIPTS
o gcp-build
en el archivo package.json
.
Solo puedes usar un método. Ten en cuenta que la variable de entorno GOOGLE_NODE_RUN_SCRIPTS
tiene prioridad y anula cualquier valor que se haya especificado para gcp-build
en tu package.json
.
De forma predeterminada, cuando configuras pasos de compilación personalizados, se instalan primero dependencies
y devDependencies
en el archivo package.json
antes de que se ejecuten secuencias de comandos o comandos. Para anular el comportamiento predeterminado, puedes usar la variable de entorno NODE_ENV
.
Estás usando GOOGLE_NODE_RUN_SCRIPTS
Puedes transferir la variable de entorno GOOGLE_NODE_RUN_SCRIPTS
a la compilación para controlar qué secuencias de comandos se ejecutan. Puedes especificar uno o varios scripts o, en su lugar, pasar una variable de entorno vacía para evitar que se ejecute el comportamiento predeterminado, como GOOGLE_NODE_RUN_SCRIPTS=
. Para obtener más información, consulta el artículo sobre variables de entorno.
Estás usando package.json
Si añades gcp-build
en tu archivo package.json
, solo se ejecutará npm run gcp-build
, lo que significa que se anulará el comportamiento predeterminado. Puede especificar uno o varios comandos, o bien una cadena vacía para evitar que se ejecute ningún comando, como "gcp-build":""
.
"scripts": {
...
"gcp-build": "npm run lint && npm run build"
...
}
Punto de entrada de la aplicación
El buildpack de Node.js ejecutará el comando especificado en el campo scripts.start
de tu package.json
.
Si no se define scripts.start
, el paquete de compilación ejecutará npm start
.
Te recomendamos que uses un Procfile porque elimina npm
o yarn
de la ruta.
Variables de entorno
Puedes definir variables de entorno para configurar las compilaciones de tu imagen de contenedor.
El paquete de compilación de Node.js admite las siguientes variables de entorno para personalizar tu contenedor.
NPM_CONFIG_<key>
Consulta la documentación.
Ejemplo: NPM_CONFIG_FLAG=value
pasa -flag=value
a los comandos de npm
.
NODE_ENV
Especifica el entorno de desarrollo durante la compilación. Se ha definido como npm install
.
Ejemplo: NODE_ENV=development
instala tanto dependencies
como devDependencies
, que se especifican en package.json
.
GOOGLE_NODE_RUN_SCRIPTS
Especifica una lista ordenada de secuencias de comandos de npm de package.json
que se ejecutarán después de instalar las dependencias. La lista debe estar separada por comas y se ejecuta en el orden en el que se enumeran las secuencias de comandos.
Si especifica GOOGLE_NODE_RUN_SCRIPTS
, solo se ejecutarán las secuencias de comandos que incluya en la lista. Por ejemplo, si quieres evitar que se ejecute el valor predeterminado npm run build
, especifica la variable de entorno sin ningún valor.
Ejemplos:
GOOGLE_NODE_RUN_SCRIPTS=lint,build
se ejecutanpm run lint
y, a continuación,npm run build
.GOOGLE_NODE_RUN_SCRIPTS=
no ejecuta ninguna secuencia de comandos.