node.js - que - procfile heroku node js
Cómo implementar un nodo que usa Gulp para heroku (8)
Cómo implementar a Heroku (o Azure) con git-push
// gulpfile.js
var gulp = require(''gulp'');
var del = require(''del'');
var push = require(''git-push'');
var argv = require(''minimist'')(process.argv.slice(2));
gulp.task(''clean'', del.bind(null, [''build/*'', ''!build/.git''], {dot: true}));
gulp.task(''build'', [''clean''], function() {
// TODO: Build website from source files into the `./build` folder
});
gulp.task(''deploy'', function(cb) {
var remote = argv.production ?
{name: ''production'', url: ''https://github.com/<org>/site.com'', branch: ''gh-pages''},
{name: ''test'', url: ''https://github.com/<org>/test.site.com'', branch: ''gh-pages''};
push(''./build'', remote, cb);
});
Entonces
$ gulp build --release
$ gulp deploy --production
Ver también
- git-push
- https://github.com/kriasoft/react-starter-kit (
tools/deploy.js
)
Estoy usando gulp y también gulp plugins como gulp-minify-css, gulp-uglify, etc. (que figuran como dependencias npm para mi aplicación).
Además, no confío la carpeta npm_modules y la carpeta pública, donde están todos los archivos generados. Y no puedo entender cómo construir mi aplicación (tengo el comando de compilación gulp) después de implementar y configurar mi servidor (ya está buscando una carpeta pública).
Me parece una mala idea confirmar antes de cargar. Tal vez hay algunas decisiones suaves ... ¿Alguna idea?
Bifurcado de: Cómo implementar la aplicación de nodo que usa ronco a heroku
¡Puedes hacerlo!
Hubo algunas medidas clave que me ayudaron en el camino:
-
heroku config:set NODE_ENV=production
- para configurar su entorno a ''producción'' -
heroku config:set BUILDPACK_URL=https://github.com/krry/heroku-buildpack-nodejs-gulp-bower
- para habilitar un buildpack Heroku personalizado. Incorporé elementos de algunos para hacer uno que funcionó para mí . Una tarea de
gulp
tituladaheroku:production
que realiza las tareas de compilación que deben realizarse en el servidor heroku cuando NODE_ENV === producción. Aquí está el mío:var gulp = require(''gulp'') var runSeq = require(''run-sequence'') gulp.task(''heroku:production'', function(){ runSeq(''clean'', ''build'', ''minify'') })
clean
,build
yminify
son, por supuesto, tareas degulp
separadas que hacen la gula mágicaSi su aplicación vive en
/app.js
, ya sea:(A)
Procfile
unProcfile
deProcfile
en la raíz del proyecto que solo contiene:web: node app.js
, o(B) agregue un script de inicio a su
package.json
.package.json
:"name": "gulp-node-app-name", "version": "10.0.4", "scripts": { "start": "node app.js" },
- Y como dice @Zero21xxx, ponga sus módulos tragamonedas en su lista de dependencias normales en package.json, no en las dependencias de desarrollo, que pasan por alto por el buildpack, que ejecuta
npm install --production
Es posible utilizar cualquier comando que desee sobre la instalación de npm. Al igual que la pregunta vinculada en su publicación, puede agregar una directiva de instalación en scripts dentro de package.json que se ejecutará después de que se hayan instalado todos los deps que hagan la compilación.
Su problema principal será ordenar las rutas relativas correctas para todo.
{ ... scripts:{ install: "YOUR GULP BUILD COMMAND" } ... }
Hay un script de inicio específico que Heroku proporciona;
"scripts": {
"start": "nodemon app.js",
"heroku-postbuild": "gulp"
}
tenga en cuenta que en su gulpfile.js (gulpfile.babel.js si es6-ifed el proceso de compilación gulp), debe tener un nombre de tarea predeterminado que se ejecutará automáticamente después de que las dependencias se instalan a través de Heroku.
https://devcenter.heroku.com/articles/nodejs-support#heroku-specific-build-steps
Heroku descubre que hay un gulpfile en su proyecto y espera que exista una tarea heroku: production (en el gulpfile). Entonces, todo lo que necesita hacer es registrar una tarea que coincida con ese nombre:
gulp.task("heroku:production", function(){
console.log(''hello''); // the task does not need to do anything.
});
Esto es suficiente para que heroku no rechace su aplicación.
La forma más fácil que encontré fue:
Configuración del
gulp
en el área de scriptspackage.json
:"scripts": { "build": "gulp", "start": "node app.js" }
Heroku ejecutará la compilación antes de iniciar la aplicación.
Incluye gulp en
dependencies
lugar dedevDevependencies
, de lo contrario, Heroku no podrá encontrarlo.
Hay más información relevante al respecto en Heroku Dev Center: Mejores prácticas para el desarrollo de Node.js
Pude hacer que esto funcionara al agregar esto en mi archivo "package.json":
"scripts": {
"start": "node app",
"postinstall": "gulp default"
}
El script postinstall
se ejecuta después del paquete de compilación. Mira this para más información. Lo único molesto es que todas tus dependencias tienen que vivir bajo "dependencias" en lugar de tener "devDependencies" separadas
No necesité hacer nada más con buildpacks o configuración. Esta parece ser la forma más simple de hacerlo.
Escribí sobre el proceso que utilicé here
Tuve que tomar un poco diferente para que esto funcione porque estoy usando browsersync:
paquete.json
"scripts": {
"start": "gulp serve"
}
gulp.js
gulp.task(''serve'', function() {
browserSync({
server: {
baseDir: ''./''
},
port: process.env.PORT || 5000
});
gulp.watch([''*.html'', ''css/*.css'', ''js/*.js'', ''views/*.html'', ''template/*.html'', ''./*.html''], {cwd: ''app''}, reload);
});
Establecer el puerto como puerto de entorno es importante para evitar errores al implementar en Heroku. No necesité establecer una secuencia de comandos postinstalación.