Búsqueda de sitios web

node.js - Uso de dependencias de desarrollo de NodeJS en el paso post-despliegue de la aplicación de revisión de Heroku


Tengo una aplicación (de demostración) alojada en Heroku. He habilitado la función de "aplicación de revisión" de Heroku para crear nuevas instancias para la revisión de solicitudes de extracción. A todas estas instancias de revisión se les proporciona un nuevo MongoDB (en mLab) a través del sistema de complementos de Heroku. Esto funciona muy bien.

En mi repositorio, he definido algunos scripts de seeders para poner rápidamente en funcionamiento una base de datos de prueba. Ejecutar yarn seed (o npm run seed) llenará la base de datos con datos de prueba. Esto funciona muy bien durante el desarrollo, y también sería perfecto para las aplicaciones de revisión. Quiero ejecutar el comando del seeder en el hook postdeploy de la aplicación de revisión de Heroku, lo cual se puede hacer especificándolo en la sección environment.review del archivo app.json. Así:

{
  "name": "...",
  "addons": [
    "mongolab:sandbox"
  ],
  "environments": {
    "review": {
      "addons": [
        "mongolab"
      ],
      "scripts": {
        "postdeploy": "npm run seed"
      }
    }
  }
}

El problema es que el script de seeder depende de algunas dependencias solo para desarrollo (faker, ts-node [este es un proyecto de TypeScript], y mongo-seeding) para ejecutarse. Y estas dependencias no están disponibles en la fase de postdeploy de una aplicación de Heroku.

También creo que "compilar" el TypeScript en el paso de construcción regular no es la mejor idea. Este script de seeder solo se usa en desarrollo (y en aplicaciones de revisión). Además, no estoy seguro de que eso resuelva el problema con dependencias faltantes como faker.

¿Cómo se haría esto? ¿Hay algún truco que me esté perdiendo?

¿Puedo tal vez saltarme el paso de Heroku donde elimina activamente las dependencias de desarrollo? ¿Pero solo para las aplicaciones de revisión? O mejor aún, ¿puedo "excluir" solo un par de dependencias que necesito, y solo para las aplicaciones de revisión?

Respuesta #1

Los documentos de Heroku indican que cuando la variable NODE_ENV contiene cualquier valor que no sea "production", las devDependencies no serán eliminadas después del paso de construcción.

Para asegurarse de que esto solo ocurra en las aplicaciones de revisión de Heroku, puede configurar la variable NODE_ENV en la sección environments.review del archivo app.json. La siguiente configuración debería funcionar:

{
  "name": "...",
  "addons": [
    "mongolab"
  ],
  "environments": {
    "review": {
      "addons": [
        "mongolab:sandbox"
      ],
      "env": {
        "NODE_ENV": "development"
      },
      "scripts": {
        "postdeploy": "npm run seed"
      }
    }
  }
}