JavaScript became very popular on the past years. Developers write and use many javascript libraries / frameworks for their web development projects, command line tools and also embedded systems (IOT). Popular tools like GitHub and NPM make it easy to collaborate and share the work between developers

In this post I will go over the steps to create a new javascript library, host it and manage it using github, npm.

Steps:

Create the local git and GitHub repository

Create the NPM package

Write and test the library locally

Publish the code and the package

Test your library

Create the local git and GitHub repository

Go to github.com and sign up to create an account

On the web interface create a new repository ( click the + sign on the top right)

On the loacl shell run the following commands:

echo "# minlibjs" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/DiscoverSDK/minlibjs.git git push -u origin master

This will create and push the first (empty) version of your library minlibjs

Create the NPM package

Go to npmjs.com and sign up to create account

To work with npm you need to install node. Also on the first time you need to create a user profile file .npmrc (located on the home directory) to create it run the following commands:

npm set init-author-name 'Liran BH' npm set init-author-email 'liran@discoversdk.com' npm set init-author-url 'http://www.discoversdk.com' npm set init-license 'MIT' npm set save-exact true

To connect to the remote package manager you need to run:

npm adduser

Then create the package.json file for your library run the following command:

npm init

Enter all the information - name, version, description, entry point, test command ,git repository, keywords and license - you can add the default values. this command will create a package.json file you can always edit

{ "name": "minlibjs", "version": "1.0.0", "description": "simple lib", "main": "src/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/DiscoverSDK/minlibjs.git" }, "keywords": [ "math" ], "author": "Liran BH <liran@discoversdk.com> (http://www.discoversdk.$ "license": "MIT", "bugs": { "url": "https://github.com/DiscoverSDK/minlibjs/issues" }, "homepage": "https://github.com/DiscoverSDK/minlibjs#readme" }

Write and test the library

Create the source file src/index.js

var math = require('mathjs'); module.exports = { mulNumbers: function (a,b){ return math.chain(a).multiply(b).value; }, addNumbers: function (a,b){ return a+b; }, subNumbers: function (a,b){ return a-b; } }

For learning purpose we add a dependency on external module (mathjs)

To install the external library run:

npm install --save mathjs

This will install the required library in node_modules directory and update the package.json file:

.... "dependencies": { "mathjs": "3.4.1" }, ....

Now you are done with the library and can test it using node command line tool:

$ node > var lib=require('./src/index.js'); > lib.addNumbers(6,7); 13 > .exit

Publish your library to GitHub and NPM

First create another file .gitignore with all the files and directories you dont want to publish (node_modules)

Now to push it to github run the following commands:

git add . git commit –m 'basic files' git push

And publish it to npm using the command:

npm publish

Thats it!!! you can use the library now

To creare a relese version run:

git tag 1.0.0 git push –tags npm publish

Test the library

Create an empty directory and run inside:

npm install minlibjs

This will download and install all the required files and dependencies.

Now create a simple test.js file:

var lib=require('minlibjs'); console.log(lib.addNumbers(2,3));

To test it run using node command line tool:

node ./test.js

Version update

On each version update you should change the version number in package.json file and run the following commands (after changing and testing the code)

git add -A git commit -m 'new version comment' git push git tag 1.1.0 git push --tags npm publish

If you want to create a beta version tag it with -beta.x for example 2.0.0-beta.1 and publish it to npm with --tag beta option