Differences between revisions 2 and 3
Revision 2 as of 2013-10-13 20:40:09
Size: 2012
Editor: ?JérémyLal
Revision 3 as of 2014-04-15 10:39:32
Size: 2056
Editor: LeoIannacone
Comment: Renamed as subpage of Nodejs
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from Javascript/nodejs

Node.js modules best practice (draft)


Loading a module in Node.js is done with

var mymod = require("somepathtomymod");

The path of the module refers to :

  • a file
  • a directory that contains an index.js file
  • a directory that contains a package.json file
  • a package.json file

The path itself can be in Node.js search path (NODE_PATH, see Node.js documentation), or an absolute or relative filesystem path.

Because of the plurality of ways to load a module, it is inevitable there is a plurality of ways to (debian-)package and install a module.

This page tries to explain the best and most compatible way to install a module.

how to install a module

A module typically has already a source tree layout with directories like "lib", "bin", and a package.json file at its root.

Installing is as simple as:

  • debian/install
    •    lib          usr/lib/nodejs/<module>
         bin          usr/lib/nodejs/<module>
         package.json usr/lib/nodejs/<module>
  • debian/links
    •    usr/lib/nodejs/<module>/bin/<mybin>.js   usr/bin/<mybinOrRenameProperly>
  • debian/dirs
    •    usr/bin

This usually allows source to be kept unpatched (except for the nodejs rename):

  • relative require statements like  require('..')  work

  • lookups in package.json like  require('./package').version 

  • load module from NODE_PATH :  require('mymodule');  still work

declare a build-dependency on nodejs

The nodejs package depends on libv8 and doesn't build on some architectures. Because of that, node-* packages having "Architecture: all" are available on architectures where nodejs isn't available - and so are uninstallable on those architectures. To work around that inconvenience to the users, simply declare an unversioned "Build-Depends: nodejs".

Declaring that build-dependency is also quite natural in the case of a package running its test suite during its build.