Npm4nix
Npm4nix converts Node.js packages into a single Nix build expression
for the Npm.nix project. Npm4nix is
inspired by Cabal2nix. Unfortunately,
npm2nix is already taken :) Thus,
npm4nix
. It supports local directories and tarballs (e. g. *.tgz
),
remote tarballs, remote Git respositories.
Requirements
Npm4nix is written in JavaScript with minimum number of depednecies and should be executed by Node.js. Npm4nix invokes curl, Git, and nix-hash, so these tools should be installed.
Example
$ node cmd/main.js https://github.com/substack/node-mkdirp.git > mkdirp.nix
executing git clone 'https://github.com/substack/node-mkdirp.git' '/tmp/npm4nix-Feo4WM'
Cloning into '/tmp/npm4nix-Feo4WM'...
executing git -C '/tmp/npm4nix-Feo4WM' rev-parse HEAD
executing nix-hash --base32 --type sha256 '/tmp/npm4nix-Feo4WM'
$ cat mkdirp.nix
{ fetchgit, buildNpmPackage, minimist, mock-fs, tap }:
buildNpmPackage {
pname = "mkdirp";
version = "0.5.1";
src = fetchgit {
url = "https://github.com/substack/node-mkdirp.git";
rev = "f2003bbcffa80f8c9744579fabab1212fc84545a";
sha256 = "0qc3l6571aknhlmzcyaah3plmf852cl160jihy3l4b05j25qv45a";
};
meta = {
description = "Recursively mkdir, like `mkdir -p`";
homepage = "";
license = "MIT";
};
npmInputs = [
minimist mock-fs tap
];
}
$ node cmd/main.js https://github.com/cowboy/javascript-sync-async-foreach/archive/v0.1.3.tar.gz > async-foreach.nix
executing curl -LsSf -o '/tmp/npm4nix-zwGeOX/v0.1.3.tar.gz' 'https://github.com/cowboy/javascript-sync-async-foreach/archive/v0.1.3.tar.gz'
executing nix-hash --flat --base32 --type sha256 '/tmp/npm4nix-zwGeOX/v0.1.3.tar.gz'
executing tar -xOf '/tmp/npm4nix-zwGeOX/v0.1.3.tar.gz' --wildcards '*/package.json'
$ cat async-foreach.nix
{ fetchurl, buildNpmPackage }:
buildNpmPackage {
pname = "async-foreach";
version = "0.1.3";
src = fetchurl {
url = "https://github.com/cowboy/javascript-sync-async-foreach/archive/v0.1.3.tar.gz";
sha256 = "1b7h2fgj6rndkviyx1hl0mh72d60a2b2f1sl86ndk8vdvr6mxmj3";
};
meta = {
description = "An optionally-asynchronous forEach with an interesting interface.";
homepage = "http://github.com/cowboy/javascript-sync-async-foreach";
license = "";
};
npmInputs = [
];
}