I am new to Node.js programming and I have recently created a sample working web application using (express, backbone & other complimentary view technologies, with mongoDB). Now i am at a point where I want to deploy the same on a staging environment and I am not sure how to package this application and distribute the same. [I can take care of mongoDb and setting it up seperately]
I am from Java world and in there we create jars for reusable libs and war/ear packages for web applications which is deployed in a servlet container. Now in this case since node.js itself acts as a web container as well, how do i package my webapp?
PS: As of now I am thinking of just manually copying all the required source files into the staging environment and run npm commands to download all dependencies on that machine and then use 'forever' or some other mechanism to run my server.js. (Also, add some sort of monitoring, just in case app crashes and forever fails) I am not sure if that is the right way? I am sure there must be some standardized way of addressing this problem.
Deploying Node.js
applications is very easy stuff. In maven, there is pom.xml
. Related concept in Node.js
is package.json
. You can state your dependencies on package.json
. You can also do environmental setup on package.json
. For example, in dev environment you can say that
I want to run unit tests.
but in production;
I want to skip unit tests.
You have local repositories for maven under .m2
folder. In Node.js, there is node_modules
folder under your Node.js project. You can see module folders with its name.
Let's come to the grunt
part of this answer. Grunt
is a task manager for your frontend assets, html, javascript, css. For example, before deployment you can minify html, css, javascript even images. You can also put grunt
task run functions in package.json
.
If you want to look at a sample application, you can find an example blog application here. Check folder structure and package.json
for reference.
For deployment, I suggest you heroku deployment for startup applciations. You can find howto here. This is simple git based deployment.
On project running part, simply set your environment NODE_ENV=development
and node app.js
. Here app.js
is in your project.
Here is relative concept for java and nodejs;
maven clean install
=> npm install
.m2
folder => node_modules
(Under project folder)mvn test
=> npm test
(test section on package.json
)junit
, powermock
, ... => mocha, node-unit, ...Spring MVC
=> Express.JS pom.xml
=> package.json
import package
=> require('module_name')
There is no standardized way, but you're on the right track. If your package.json
is up to date and well kept, you can just copy/zip/clone your app directory to the production system, excluding the node_modules
.
On your production system, run npm install
to install your dependencies, npm test
if you have tests and finally NODE_ENV=production node server.js
Some recent slides I considered to be quite helpful that also include the topic of wrappers like forever, can be found here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With