blob: 31e87c4192b96d8103eaeabbb42e6791f015e35d [file] [log] [blame]
////
Copyright (c) 2016 NumberFour AG.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html
Contributors:
NumberFour AG - Initial API and implementation
////
:toc: right
:toc-title: Jump to section:
:commandkey: ⌘
.N4JS npm Export Guide
= N4JS npm Export Guide
N4JS was created with the intention of supporting safe and intuitive Node.js development.
When a Node application
is ready to be published, the default
package manager is npm which is bundled with Node.js (a prerequisite of the N4JS IDE). npm is run on the
command
line and will organise and install
dependencies for an application. npm can also be used to install Node.js applications available on the npm
registry. This npm export guide demonstrates how N4JS can be used to develop and publish Node
applications with a simple example module.
== Project Example
In order to demonstrate exporting as npm, we can begin by creating a new N4JS
Project using the keyboard shortcut kbd:[{commandkey} + N] and naming
it "fibonacci". We then create a class "Fibonacci" and define it as follows:
[source,n4js]
.Fibonacci.n4js
----
export public class Fibonacci {
public seq() {
var arr = [];
var a = 0;
var b = 1;
for (var n = 1; n < 15; n++) {
var current = a + b;
arr.push(current);
a = b + a;
b = a - b;
}
console.log(arr);
}
}
var run = new Fibonacci();
run.seq();
----
In the above example, we are creating a function which will iterate through the Fibonacci sequence,
push each new value into an array and report the results in the console after the for loop is complete.
When right-clicking the module and selecting menu:Run as[Launch in node.js], we have the
following output in the console:
image::images/fibonacciconsole.png[]
== Exporting as npm
To export our Fibonacci example, navigate to the Project
Explorer view, right-click our Fibonacci.n4js file or the project name and select *Export*.
An Export wizard will list the available types of exports.
Select *N4JS npm export* in the *N4JS Exports* folder.
image::images/exportwizard.png[]
On the following screen, we can select a target folder and click "Finish" to complete the export. There is
an option to compress the files on export which will create a tarball.
image::images/npmtargetfolder.png[]
If we have a look in the target folder, we can see that a new folder has been created which is our
exported package. The contents of the package are:
* *Fibonacci.js* the Fibonacci.n4js file transpiled to JavaScript.
* *package.json* npm package description (name, author, version etc.) which is described in detail below.
* *manifest.n4mf* N4JS project dependencies.
* *Fibonacci.map* contains debugging information.
* *src* folder containing the original Fibonacci.n4js file.
== Running from the Command Line
In the example so far, we exported our npm package to a folder on the desktop called "npm". We create
a folder called *newinstall* located at `User/bsmith/Desktop/npm/newinstall`, but this can be anywhere
outside of the exported project folder.
With a Terminal window, cd to our new folder:
[source]
$ cd /User/Desktop/npm/newinstall
and install the package
[source]
$ npm install ../fibonacci
All dependiencies required for running the package will then be downloaded and installed
to the "newinstall" folder
[source,text]
/User/Desktop/npm/newinstall
└─┬ fibonacci@ 0.0.1
└─┬ n4js-node@ 0.3.1
├── n4js-es5@ 0.3.0
├─┬ node-fetch@ 1.4.1
├─┬ encoding@ 0.1.12
└── iconv-lite@ 0.4.13
└── is-stream@ 1.0.1
└─┬ systemjs@ 0.19.25
└── when@ 3.7.7
We can now create a new JavaScript file saved as "index.js" that calls the method in our package. In our
case, the index.js only needs to contain the following line
[source,javascript]
.index.js
var fib = require("fibonacci/Fibonacci");
Our example module can now be called if we run the index.js file from the command line with node:
[source]
----
$ node index.js
[ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610 ]
$
----
If we wanted to run this node module by itself without the use of the index.js file, we can use the command
[source]
$ node -r fibonacci/Fibonacci
== Modifying Package Info
In our exported npm project, a package.json file is created from the project *manifest* which contains
information about the package. The minimum information required for a package.json file is:
* *name* of the package (all lowercase, one word, no spaces, dashes and underscores allowed).
* *version* following https://docs.npmjs.com/getting-started/semantic-versioning[semver conventions] i.e.
*1.0.0*.
Let's say we wanted to change the version of our npm package, we can edit this in the manifest.n4mf file
in the root of our fibonacci project:
[source,n4mf]
.manifest.n4mf
----
ProjectId: fibonacci
ProjectType: library
ProjectVersion: 1.2.3
VendorId: eu.mycompany
VendorName: "MyCompany AG"
Output: "src-gen"
Sources {
source {
"src"
}
}
----
Above, we have made the simple change of our project from version "0.0.1" (the default) to "1.2.3"
and the package.json file will contain our new version number the next time we export as npm.
=== Editing the package.json from the Command Line
It's possible to edit the package.json from the command line by using `npm init` which is normally
used to create a new package:
[source]
$ cd /User/brian.smith/Desktop/npm/fibonacci
$ npm init
This will load a questionnaire that will cycle through the attributes of your existing package and
update the *package.json* file if new information is provided.
NOTE: It is recommended to edit the package information via the manifest.n4mf
file within the N4JS IDE as exporting the project again will overwrite changes made to the package.json
via the command line.
== Publishing to npm
In order to publish to npm, you must have an account on the npm registry. To store your credentials on the
client:
[source]
$ npm login
If you do not already have an account, use `npm adduser` to
create a new account. Test that your credentials are stored on the client with *npm config ls.
To publish our exported npm package, cd to the package and use the command `npm publish`
[source]
$ cd /Users/brian.smith/Desktop/npm/fibonacci
$ npm publish
We can now check if our package has been published to the registry, in our case, it would be published
at *https://npmjs.com/package/fibonacci*