npm - Packages for NodeJS
===============================

Supported Uses in FPM
---------------------

fpm supports using ``npm`` only as an input type.

Arguments when used as input type
---------------------------------

Any number of arguments are supported and behave as follows:

* ``name@version`` -- a specific named package at the given version.
* ``name`` -- the name of a node package. In this use, the ``--version`` flag is used to pick the version to download. If no version is given, the latest version of the package is downloaded.

Sample Usage
------------

You'll need ``npm`` installed for this example.

Let's turn the ``ascii-art`` npm package into a Debian package. For this example, we'll pick a specific version, 2.8.5::

  % fpm --debug -s npm -t deb --depends nodejs ascii-art@2.8.5
  Created package {:path=>"node-ascii-art_2.8.5_amd64.deb"}

Fpm uses ``npm`` to download the correct package. Additionally, the package name is given a ``node-`` prefix because this is common in distribution packages to prefix a library with the platform name, such as ``python-foo`` or ``node-foo``.

It also parses the package's ``package.json`` to collect any useful data such as the package name, author, homepage, description, etc::

  % dpkg --field node-ascii-art_2.8.5_amd64.deb Package Version Vendor Homepage Description
  Package: node-ascii-art
  Version: 2.8.5
  Vendor: Abbey Hawk Sparrow <@khrome>
  Homepage: git://github.com/khrome/ascii-art.git
  Description: Ansi codes, figlet fonts, and ascii art. 100% JS

Let's install the package and try to use it::

  % sudo apt-get install ./node-ascii-art_2.8.5_amd64.deb

And now we can use this package::

  % ascii-art text -F Doom "Hello World"
   _   _        _  _          _    _               _      _
  | | | |      | || |        | |  | |             | |    | |
  | |_| |  ___ | || |  ___   | |  | |  ___   _ __ | |  __| |
  |  _  | / _ \| || | / _ \  | |/\| | / _ \ | '__|| | / _` |
  | | | ||  __/| || || (_) | \  /\  /| (_) || |   | || (_| |
  \_| |_/ \___||_||_| \___/   \/  \/  \___/ |_|   |_| \__,_|

Fpm asked ``npm`` where to install things using ``npm prefix -g``. On my system, this caused the package to install to ``/usr/local/lib/node_modules``. You can change the default prefix with the fpm ``--prefix`` flag or by changing the default global prefix in the ``npm`` tool.

Let's try to invoke ``ascii-art`` from node::

  % export NODE_PATH=/usr/local/lib/node_modules
  % node
  > let art = require("ascii-art")
  > art.font("Hello", "Doom", (err, rendered) => console.log(rendered))
   _   _        _  _
  | | | |      | || |
  | |_| |  ___ | || |  ___
  |  _  | / _ \| || | / _ \
  | | | ||  __/| || || (_) |
  \_| |_/ \___||_||_| \___/

Nice :)

Fun Examples
------------

.. note::
  Do you have any examples you want to share that use the ``npm`` package type? Share your knowledge here: https://github.com/jordansissel/fpm/issues/new

npm-specific command line flags
-------------------------------

.. include:: cli/npm.rst