Yarn2nix
Generate nix expressions from a yarn.lock file [maintainer=???]
Install / Use
/learn @nix-community/Yarn2nixREADME
This repo is deprecated and was integrated into nixpkgs in https://github.com/NixOS/nixpkgs/pull/108138
yarn2nix
<img src="https://travis-ci.org/moretea/yarn2nix.svg?branch=master">Converts yarn.lock files into nix expression.
- Make yarn and yarn2nix available in your shell.
cd $GIT_REPO nix-env -i yarn2nix -f . nix-env -i yarn -f . - Go to your project dir
- If you have not generated a yarn.lock file before, run
yarn install - Create a
yarn.nixvia:yarn2nix > yarn.nix - Create a
default.nixto build your application (see the example below)
Requirements
Make sure to generate the lock file with yarn >= 1.10.1
Example default.nix
For example, for the front-end of weave's microservice reference application:
with (import <nixpkgs> {});
with (import /home/maarten/code/nixos/yarn2nix { inherit pkgs; });
rec {
weave-front-end = mkYarnPackage {
name = "weave-front-end";
src = ./.;
packageJSON = ./package.json;
yarnLock = ./yarn.lock;
# NOTE: this is optional and generated dynamically if omitted
yarnNix = ./yarn.nix;
};
}
note: you must modify /home/maarten/code/nixos/yarn2nix
To make this work nicely, I exposed the express server in server.js as a binary:
- Add a
binentry topackages.jsonwith the valueserver.js - Add
#!/usr/bin/env nodeat the top of the file chmod +x server.js
Testing the example
- Run
nix-buildIn thefront-enddirectory. Copy the result path. - Create an isolated environment
cd /tmp; nix-shell --pure -p bash. /nix/store/some-path-to-frontend/bin/weave-demo-frontend
Run tests locally
./update-yarn-nix.sh
./tests/no-import-from-derivation/update-yarn-nix.sh
./run-tests.sh
Troubleshooting
nix-build fails with "found changes in the lockfile" error
yarn2nix runs on the beginning of build to ensure that yarn.lock is correct (and to collect nix-expressions if you haven't provided them). So, if there is something wrong, yarn2nix tries to change the lockfile, but fails and aborts, as it is run with --no-patch flag (as we can't let changes inside of nix-build).
It can sometimes give false-positives, so the solution at the moment is running yarn2nix --no-nix to patch the lockfile in place (the flag is just to avoid config spam, unless you're up to write yarn.nix).
License
yarn2nix is released under the terms of the GPL-3.0 license.
