summary refs log tree commit diff
path: root/pkgs/development/web/nodejs/build-node-package.nix
blob: e90e9446846c63cffc6b19ccc7bc56689e397f04 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{ stdenv, runCommand, nodejs, neededNatives}:

args @ { src, deps ? [], flags ? [], ... }:

with stdenv.lib;

let npmFlags = concatStringsSep " " (map (v: "--${v}") flags);
    sources = runCommand "node-sources" {} ''
      tar xf ${nodejs.src}
      mv *node* $out
    '';

in
stdenv.mkDerivation ({
  unpackPhase = "true";

  configurePhase = ''
    runHook preConfigure
    mkdir node_modules
    ${stdenv.lib.concatStrings (map (dep: ''
      ln -sv ${dep}/node_modules/${(builtins.parseDrvName dep.name).name} node_modules/
    '') deps)}
    export HOME=$(pwd)
    runHook postConfigure
  '';

  buildPhase = ''
    runHook preBuild
    ${nodejs}/bin/npm --registry http://www.example.com --nodedir=${sources} install ${src} ${npmFlags}
    runHook postBuild
  '';

  nativeBuildInputs = neededNatives;

  installPhase = ''
    runHook preInstall
    mkdir $out
    mv node_modules $out
    if [ -d "$out/node_modules/.bin" ]; then
      ln -sv node_modules/.bin $out/bin
      find -L $out/node_modules/.bin/* -type f -print0 | \
        xargs -0 sed --follow-symlinks -i 's@#!/usr/bin/env node@#!${nodejs}/bin/node@'
    fi
    runHook postInstall
  '';

  preFixup = ''
    find $out -type f -print0 | xargs -0 sed -i 's|${src}|${src.name}|g'
  '';
} // args)