1Node.js packages
2================
3The `pkgs/development/node-packages` folder contains a generated collection of
4[NPM packages](https://npmjs.com/) that can be installed with the Nix package
5manager.
6
7As a rule of thumb, the package set should only provide *end user* software
8packages, such as command-line utilities. Libraries should only be added to the
9package set if there is a non-NPM package that requires it.
10
11When it is desired to use NPM libraries in a development project, use the
12`node2nix` generator directly on the `package.json` configuration file of the
13project.
14
15The package set also provides support for multiple Node.js versions. The policy
16is that a new package should be added to the collection for the latest stable LTS
17release (which is currently 8.x), unless there is an explicit reason to support
18a different release.
19
20If your package uses native addons, you need to examine what kind of native
21build system it uses. Here are some examples:
22
23* `node-gyp`
24* `node-gyp-builder`
25* `node-pre-gyp`
26
27After you have identified the correct system, you need to override your package
28expression while adding in build system as a build input. For example, `dat`
29requires `node-gyp-build`, so we override its expression in `default-v8.nix`:
30
31```nix
32dat = nodePackages.dat.override (oldAttrs: {
33 buildInputs = oldAttrs.buildInputs ++ [ nodePackages.node-gyp-build ];
34});
35```
36
37To add a package from NPM to nixpkgs:
38
39 1. Modify `pkgs/development/node-packages/node-packages-v8.json` to add, update
40 or remove package entries. (Or `pkgs/development/node-packages/node-packages-v10.json`
41 for packages depending on Node.js 10.x)
42 2. Run the script: `(cd pkgs/development/node-packages && ./generate.sh)`.
43 3. Build your new package to test your changes:
44 `cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>`.
45 To build against a specific Node.js version (e.g. 10.x):
46 `nix-build -A nodePackages_10_x.<new-or-updated-package>`
47 4. Add and commit all modified and generated files.
48
49For more information about the generation process, consult the
50[README.md](https://github.com/svanderburg/node2nix) file of the `node2nix`
51tool.