The dumbest node to Nix packaging solution yet!
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
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.
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
];
nodeModules = buildNodeModules.fetchNodeModules {
packageRoot = ./.;
};
}
shell.nix
pkgs.mkShell {
packages = [
buildNodeModules.hooks.linkNodeModulesHook
nodejs
];
nodeModules = buildNodeModules.buildNodeModules {
packageRoot = ./.;
inherit nodejs;
};
}