heroku – npm postinstall script para ejecutar la tarea grunt dependiendo de enviro

Tengo dos aplicaciones heroku node.js, una para prod y otra para dev, y también tengo un Gruntfile con tareas específicas de dev y prod. Sé que puedes configurar package.json para ejecutar grunt como un enlace postinstall para npm, pero ¿puedes especificar algunas tareas diferentes para ejecutar dependiendo de en qué entorno estés?

Aquí es cómo se ve la sección relevante de mi package.json hasta ahora:

"scripts": { "postinstall": "./node_modules/grunt/bin/grunt default" }, 

En lugar de ejecutar el valor predeterminado de Grunt cada vez, me encantaría ejecutar “Grunt Production” si NODE_ENV es producción, etc.

es posible?

Lamentablemente no hay diferencia como postInstall y postInstallDev . Sin embargo, puedes hacer un script intermedio para manejar la diferencia. Por ejemplo, si tiene lo siguiente:

 "scripts": { "postinstall": "node postInstall.js" }, 

Luego, en este script, puede comprobar la variable de entorno y ejecutar la tarea Grunt correcta desde allí:

 // postInstall.js var env = process.env.NODE_ENV; if (env === 'development') { // Spawn a process or require the Gruntfile directly for the default task. return; } if (env === 'production') { // Spawn a process or require the Gruntfile directly to the prod task. return; } console.error('No task for environment:', env); process.exit(1); 

Un par de puntos relacionados periféricamente …

  • Trate de no tener Grunt and co. como dependencies . Manténgalos en devDependencies para evitar tener que instalar todas esas cosas en producción. Tener un script intermediario en el Nodo de vainilla como el anterior le permitirá hacer esto. Me gusta usar un script postInstall como este para instalar también scripts de git hook (pero también solo en entornos de desarrollo).
  • No tiene que usar ./node_modules/grunt/bin/grunt default . Si grunt-cli es una dependency o dependency devDependency , npm sabe dónde buscar y el grunt default Grunt funcionará bien.

Por alguna razón, mi entorno de desarrollo nunca ejecutaba mi “desarrollo” en caso de statement. Envié un ticket al soporte de Heroku, y esta fue su respuesta: “De manera predeterminada, su entorno no está disponible durante la comstackción de slug. Si desea que esté disponible, puede habilitar una función experimental llamada” user-env-compile ” Consulte el siguiente artículo para obtener más información: http://devcenter.heroku.com/articles/labs-user-env-compile “. Bueno saber. Entonces, tomé otra ruta utilizando el paquete de herramientas heroku-buildpack-nodejs-grunt, y luego creando una tarea heroku: desarrollo grunt.