|
1 | 1 | { runCommandNoCC |
2 | | -, nix-gitignore |
3 | | -, nodejs |
4 | | -, nodePackages |
5 | | -, pkgs |
6 | | -, lib |
| 2 | +, callPackage |
7 | 3 | }: |
8 | 4 |
|
9 | 5 | let |
10 | | - src = nix-gitignore.gitignoreSource [".git"] ./.; |
11 | | - nodeVersion = builtins.elemAt (lib.versions.splitVersion nodejs.version) 0; |
12 | | - node2nixDrv = dev: runCommandNoCC "node2nix" {} '' |
13 | | - mkdir $out |
14 | | - ${nodePackages.node2nix}/bin/node2nix \ |
15 | | - ${lib.optionalString dev "--development"} \ |
16 | | - --input ${src}/package.json \ |
17 | | - --lock ${src}/package-lock.json \ |
18 | | - --node-env $out/node-env.nix \ |
19 | | - --output $out/node-packages.nix \ |
20 | | - --composition $out/default.nix \ |
21 | | - --nodejs-${nodeVersion} |
22 | | - ''; |
23 | | - # the shell attribute has the nodeDependencies, whereas the package does not |
24 | | - node2nixProd = ( |
25 | | - (import (node2nixDrv false) { inherit pkgs nodejs; }).shell.override { |
26 | | - dontNpmInstall = true; |
| 6 | + utils = callPackage ./utils.nix {}; |
| 7 | + drv = runCommandNoCC |
| 8 | + "${utils.basename}-${utils.node2nixDev.version}" |
| 9 | + { |
| 10 | + version = utils.node2nixDev.version; |
| 11 | + packageName = utils.node2nixDev.packageName; |
27 | 12 | } |
28 | | - ).nodeDependencies; |
29 | | - node2nixDev = (import (node2nixDrv true) { inherit pkgs nodejs; }).package.overrideAttrs (attrs: { |
30 | | - src = src; |
31 | | - dontNpmInstall = true; |
32 | | - postInstall = '' |
33 | | - # The dependencies were prepared in the install phase |
34 | | - # See `node2nix` generated `node-env.nix` for details. |
35 | | - npm run build |
36 | | -
|
37 | | - # This call does not actually install packages. The dependencies |
38 | | - # are present in `node_modules` already. It creates symlinks in |
39 | | - # $out/lib/node_modules/.bin according to `bin` section in `package.json`. |
40 | | - npm install |
41 | | - ''; |
42 | | - }); |
43 | | - name = "${builtins.replaceStrings ["/" "@"] ["_" ""] node2nixDev.packageName}-${node2nixDev.version}"; |
44 | | - drv = runCommandNoCC name {} '' |
45 | | - mkdir -p $out/lib/node_modules/${node2nixDev.packageName} |
| 13 | + '' |
| 14 | + mkdir -p $out/lib/node_modules/${utils.node2nixDev.packageName} |
46 | 15 | # copy only the dist |
47 | | - cp -r ${node2nixDev}/lib/node_modules/${node2nixDev.packageName}/dist $out/lib/node_modules/${node2nixDev.packageName}/ |
| 16 | + cp -r ${utils.node2nixDev}/lib/node_modules/${utils.node2nixDev.packageName}/dist $out/lib/node_modules/${utils.node2nixDev.packageName}/ |
48 | 17 | # copy over the production dependencies |
49 | | - if [ -d "${node2nixProd}/lib/node_modules" ]; then |
50 | | - cp -r ${node2nixProd}/lib/node_modules $out/lib/node_modules/${node2nixDev.packageName}/ |
| 18 | + if [ -d "${utils.node2nixProd}/lib/node_modules" ]; then |
| 19 | + cp -r ${utils.node2nixProd}/lib/node_modules $out/lib/node_modules/${utils.node2nixDev.packageName}/ |
51 | 20 | fi |
52 | 21 | # create symlink to the deployed executable folder, if applicable |
53 | | - if [ -d "${node2nixDev}/lib/node_modules/.bin" ]; then |
54 | | - cp -r ${node2nixDev}/lib/node_modules/.bin $out/lib/node_modules/ |
| 22 | + if [ -d "${utils.node2nixDev}/lib/node_modules/.bin" ]; then |
| 23 | + cp -r ${utils.node2nixDev}/lib/node_modules/.bin $out/lib/node_modules/ |
55 | 24 | ln -s $out/lib/node_modules/.bin $out/bin |
56 | 25 | fi |
57 | 26 | ''; |
|
0 commit comments