2021-01-01 09:45:43 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# Node.js {#node.js}
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-24 10:47:41 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								The `pkgs/development/node-packages`  folder contains a generated collection of
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[NPM packages ](https://npmjs.com/ ) that can be installed with the Nix package
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								manager.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								As a rule of thumb, the package set should only provide *end user*  software
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								packages, such as command-line utilities. Libraries should only be added to the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								package set if there is a non-NPM package that requires it.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								When it is desired to use NPM libraries in a development project, use the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								`node2nix`  generator directly on the `package.json`  configuration file of the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								project.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								The package set provides support for the official stable Node.js versions.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The latest stable LTS release in `nodePackages` , as well as the latest stable
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Current release in `nodePackages_latest` .
							 
						 
					
						
							
								
									
										
										
										
											2018-03-24 10:47:41 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								If your package uses native addons, you need to examine what kind of native
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								build system it uses. Here are some examples:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  `node-gyp` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  `node-gyp-builder` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  `node-pre-gyp` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								After you have identified the correct system, you need to override your package
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								expression while adding in build system as a build input. For example, `dat` 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-02 19:00:42 +03:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								requires `node-gyp-build` , so [we override ](https://github.com/NixOS/nixpkgs/blob/32f5e5da4a1b3f0595527f5195ac3a91451e9b56/pkgs/development/node-packages/default.nix#L37-L40 ) its expression in [`default.nix` ](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages/default.nix ):
							 
						 
					
						
							
								
									
										
										
										
											2018-03-24 10:47:41 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								```nix
							 
						 
					
						
							
								
									
										
										
										
											2020-09-02 19:00:42 +03:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    dat = super.dat.override {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      buildInputs = [ self.node-gyp-build pkgs.libtool pkgs.autoconf pkgs.automake ];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      meta.broken = since "12";
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    };
							 
						 
					
						
							
								
									
										
										
										
											2018-03-24 10:47:41 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								To add a package from NPM to nixpkgs:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 1.  Modify `pkgs/development/node-packages/node-packages.json`  to add, update
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    or remove package entries to have it included in `nodePackages`  and
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    `nodePackages_latest` .
							 
						 
					
						
							
								
									
										
										
										
											2018-03-24 10:47:41 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 2.  Run the script: `(cd pkgs/development/node-packages && ./generate.sh)` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 3.  Build your new package to test your changes:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    `cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>` .
							 
						 
					
						
							
								
									
										
										
										
											2020-05-29 18:25:11 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    To build against the latest stable Current Node.js version (e.g. 14.x):
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    `nix-build -A nodePackages_latest.<new-or-updated-package>` 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-24 10:47:41 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 4.  Add and commit all modified and generated files.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								For more information about the generation process, consult the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								[README.md ](https://github.com/svanderburg/node2nix ) file of the `node2nix` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								tool.