iOS: Building complex Node.js projects¶
This guide will show you how to start the node runtime from a project folder on iOS. It builds on top of the iOS Getting Started instructions, having the same functionality but using a nodejs-project
folder that contais the node part of the project. It also shows how to use an npm module in the project.
The complete project can also be downloaded from the samples repo.
Create the nodejs-project
folder¶
Create a nodejs-project
folder inside the project and add it as a Resource to the Xcode project.
It contains two files inside:
main.js
var http = require('http'); var versions_server = http.createServer( (request, response) => { response.end('Versions: ' + JSON.stringify(process.versions)); }); versions_server.listen(3000);
package.json
{ "name": "native-xcode-node-project", "version": "0.0.1", "description": "node part of the project", "main": "main.js", "author": "janeasystems", "license": "" }
Add a npm module to the nodejs-project
¶
Having a nodejs-project
path with a package.json
inside is helpful for using npm modules, by running npm install {module_name}
inside nodejs-project
so that the modules are also packaged with the application and made available at runtime.
Install the left-pad
module, by running npm install left-pad
inside the nodejs-project
folder.
Update main.js
to use the module:
var http = require('http'); var leftPad = require('left-pad'); var versions_server = http.createServer( (request, response) => { response.end('Versions: ' + JSON.stringify(process.versions) + ' left-pad: ' + leftPad(42, 5, '0')); }); versions_server.listen(3000);
Start the node runtime from the Node Project¶
Change the code that starts the node runtime in AppDelegate.m
to find the main.js
inside the Application's bundle and start from there:
- (void)startNode { NSString* srcPath = [[NSBundle mainBundle] pathForResource:@"nodejs-project/main.js" ofType:@""]; NSArray* nodeArguments = [NSArray arrayWithObjects: @"node", srcPath, nil ]; [NodeRunner startEngineWithArguments:nodeArguments]; }