adisbladis/buildNodeModules

An experiment in improving node packaging for nix. Dead simple.

Nix

43

27 commits

updated Sep 4, 2024

See the code

README

buildNodeModules

The dumbest node to Nix packaging solution yet!

Status: This project has been integrated into nixpkgs as importNpmLock.

How it works

How node_modules is built

  • Map over package-lock.json packages, invoke correct fetcher

  • Update package.json & package-lock.lock to point to store paths URLs are rewritten to file:... dependencies that link to the Nix store.

  • Run npm install

How node_modules is linked

Our configure/shell hook links individual directories inside the Nix built node_modules directory. This is to work around issues like https://github.com/nix-community/npmlock2nix/issues/86 and that tools like vite expects a writable node_modules.

Usage

  • default.nix
stdenv.mkDerivation {
  pname = "my-website";
  version = "0.1.0";

  src = ./.;

  nativeBuildInputs = [
    buildNodeModules.hooks.npmConfigHook
    nodejs
    nodejs.passthru.python # for node-gyp
    npmHooks.npmBuildHook
    npmHooks.npmInstallHook
  ];

  npmDeps = buildNodeModules.fetchNodeModules {
    npmRoot = ./.;
  };
}
  • shell.nix
pkgs.mkShell {
  packages = [
    buildNodeModules.hooks.linkNodeModulesHook
    nodejs
  ];

  npmDeps = buildNodeModules.buildNodeModules {
    npmRoot = ./.;
    inherit nodejs;
  };
}

Contributors

adisbladis

26 commits

ursi

1 commits

adisbladis/buildNodeModules

An experiment in improving node packaging for nix. Dead simple.

Nix

43

27 commits

updated Sep 4, 2024

See the code

README

buildNodeModules

The dumbest node to Nix packaging solution yet!

Status: This project has been integrated into nixpkgs as importNpmLock.

How it works

How node_modules is built

  • Map over package-lock.json packages, invoke correct fetcher

  • Update package.json & package-lock.lock to point to store paths URLs are rewritten to file:... dependencies that link to the Nix store.

  • Run npm install

How node_modules is linked

Our configure/shell hook links individual directories inside the Nix built node_modules directory. This is to work around issues like https://github.com/nix-community/npmlock2nix/issues/86 and that tools like vite expects a writable node_modules.

Usage

  • default.nix
stdenv.mkDerivation {
  pname = "my-website";
  version = "0.1.0";

  src = ./.;

  nativeBuildInputs = [
    buildNodeModules.hooks.npmConfigHook
    nodejs
    nodejs.passthru.python # for node-gyp
    npmHooks.npmBuildHook
    npmHooks.npmInstallHook
  ];

  npmDeps = buildNodeModules.fetchNodeModules {
    npmRoot = ./.;
  };
}
  • shell.nix
pkgs.mkShell {
  packages = [
    buildNodeModules.hooks.linkNodeModulesHook
    nodejs
  ];

  npmDeps = buildNodeModules.buildNodeModules {
    npmRoot = ./.;
    inherit nodejs;
  };
}

Contributors

adisbladis

26 commits

ursi

1 commits

Languages

Nix

52.8%

JavaScript

37.1%

Shell

10.0%