- Node.js Tutorial
- Node.js - Home
- Node.js - Introduction
- Node.js - Environment Setup
- Node.js - First Application
- Node.js - REPL Terminal
- Node.js - Command Line Options
- Node.js - Package Manager (NPM)
- Node.js - Callbacks Concept
- Node.js - Upload Files
- Node.js - Send an Email
- Node.js - Events
- Node.js - Event Loop
- Node.js - Event Emitter
- Node.js - Debugger
- Node.js - Global Objects
- Node.js - Console
- Node.js - Process
- Node.js - Scaling Application
- Node.js - Packaging
- Node.js - Express Framework
- Node.js - RESTFul API
- Node.js - Buffers
- Node.js - Streams
- Node.js - File System
- Node.js MySQL
- Node.js - MySQL Get Started
- Node.js - MySQL Create Database
- Node.js - MySQL Create Table
- Node.js - MySQL Insert Into
- Node.js - MySQL Select From
- Node.js - MySQL Where
- Node.js - MySQL Order By
- Node.js - MySQL Delete
- Node.js - MySQL Update
- Node.js - MySQL Join
- Node.js MongoDB
- Node.js - MongoDB Get Started
- Node.js - MongoDB Create Database
- Node.js - MongoDB Create Collection
- Node.js - MongoDB Insert
- Node.js - MongoDB Find
- Node.js - MongoDB Query
- Node.js - MongoDB Sort
- Node.js - MongoDB Delete
- Node.js - MongoDB Update
- Node.js - MongoDB Limit
- Node.js - MongoDB Join
- Node.js Modules
- Node.js - Modules
- Node.js - Built-in Modules
- Node.js - Utility Modules
- Node.js - Web Module
- Node.js Useful Resources
- Node.js - Quick Guide
- Node.js - Useful Resources
- Node.js - Dicussion
Node.js - Packaging
A large-sized Node.js project usually has a number of dependencies and a number of source files as well as other assets such as images, web pages, setting files etc. To distribute a Node.js project and deploy it on any other environment becomes difficult, and hence it needs to packaged so that it can be easily ported to other machine. There are a number of packaging tools available on NPM repository. This chapter discusses nexe packaging tool, and also takes overview of some other packaging libraries.
Nexe
To demonstrate how the Nexe utility works, we shall an ExpressJs app with the following script −
Index.js
var express = require('express'); var app = express(); var path = require('path'); var bodyParser = require('body-parser'); // Create application/x-www-form-urlencoded parser var urlencodedParser = bodyParser.urlencoded({ extended: false }) app.use(express.static('public')); app.get('/', function (req, res) { res.sendFile(path.join(__dirname,"index.html")); }) app.get('/process_get', function (req, res) { // Prepare output in JSON format response = { first_name:req.query.first_name, last_name:req.query.last_name }; console.log(response); res.end(JSON.stringify(response)); }) app.post("/process_post", ) var server = app.listen(5000, function () { console.log("Express App running at http://127.0.0.1:5000/"); })
The ‘/’ route renders a HTML form from the following script −
Index.html
<html> <body> <form action = "/process_POST" method = "POST"> First Name: <input type = "text" name = "first_name"> <br> Last Name: <input type = "text" name = "last_name"> <br> <input type = "submit" value = "Submit"> </form> </body> </html>
The Node.js server displays the following form −
The Node.js application above also registers the static middleware, hence it displays an image placed in static/images folder.
We now want to build a self-executable for this Node.js app containing the code, the subdirectories as well as the assets in a single file. Nexe is a command-line utility that compiles your Node.js application into a single executable file.
Features of Nexe
Self contained applications
Ability to run multiple applications with different node.js runtimes.
Distribute binaries without needing node / npm.
Start and deploy faster.
Flexible build pipeline
Cross platform builds
Install Nexe on Windows
Perform global installation of Nexe as follows −
npm install nexe -g
You also need Netwide Assembler (NASM) tool. Download and install the same from www.nasm.us
The nexe utility requires Python installed on the system. Ensure that Python is one of the versions 3.11 to 3.7.
Assuming that you are using nexe for 64-bit Windows OS, you also need to install The "Desktop development with C++" workload from Visual Studio 2022. It can be installed from aka.ms.
(For other OS platforms, follow the instructions on github.com/nodejs
Once all the prerequisites are installed, run the following command in the CMD terminal −
D:\expressApp>nexe index.js --build windows-x64-20.9.0 –verbose
The compilation may take a while, but in the end, it will create expressApp.exe in the application folder.
D:\expressApp │ expressApp.exe │ index.html │ index.js │ package-lock.json │ package.json │ users.json │ ├───node_modules │ │ .package-lock.json │ ├───body-parser │ │ │ HISTORY.md │ │ │ index.js │ │ │ LICENSE │ │ │ package.json │ │ │ README.md │ │ │ SECURITY.md │ │ │ . . . │ │ │ . . . │ │ │ . . . │ ├───express │ │ │ History.md │ │ │ index.js │ │ │ LICENSE │ │ │ package.json │ │ │ Readme.md │ │ │ . . . │ │ │ . . . │ │ │ . . . └───public └───images logo.png
Run it from the command line, and the Node.js server starts.
D:\expressApp>expressapp Express App running at http://127.0.0.1:5000/
pkg tool
The pkg tool is a command-line interface that enables the developer to create executables from Node.JS projects; allowing you to run the app even on environments that do not have Node.JS installed on them.
To install pkg, use the command −
npm install -g pkg
Then use pkg to build the executable
pkg myapp.js
Running the above command will generate three programmes; namely an executable for Windows, macOS, and Linux. More details can be found at www.npmjs.com.
JXCore
JXcore, which is an open source project, introduces a unique feature for packaging and encryption of source files and other assets into JX packages.
Download and install the JXcore package from https://github.com/jxcore, as per your operating system and machine architecture.
To package the above project, you simply need to go inside this directory and issue the following jx command. Assuming index.js is the entry file for your Node.js project −
jx package index.js index
the above command will pack everything and will create the following two files −
index.jxp − This is an intermediate file which contains the complete project detail needed to compile the project.
index.jx − This is the binary file having the complete package that is ready to be shipped to your client or to your production environment.
Consider your original Node.js project was running as follows −
node index.js command_line_arguments
After compiling your package using JXcore, it can be started as follows −
jx index.jx command_line_arguments
To Continue Learning Please Login
Login with Google