What is yarn link and why would you want to use it?
yarn link is a command that allows you to link a local npm package to your current project. Why is that useful? To consume code of a package you usually simply install the package as a dependency to your project. But let’s assume you are developing a npm package “my-package” yourself and want to test it within another local project “my-project” first, before publishing it. The solution is to link “my-package” to “my-project”.
Another use case could be if you want to check out the source files of a third-party package and use them for debugging in your project.
How do you use yarn link?
Change to the root directory of the npm package that you want to make available for linking, e.g. “my-package”. Then run:
yarn link --global
This creates a symlink which points to your package in C:\Users\me\AppData\Local\Yarn\Data\link
on Windows or ~/.config/yarn/link
in Linux. If you want to specify a different folder you can run the command with this syntax yarn link --link-folder path/to/dir/
C:\Users\me\AppData\Local\Yarn\Data\link
If you get an error such as the following
An unexpected error occurred: "ENOENT: no such file or directory, stat [filename]
then check the “main” or “bin” entry in your package.json
.
Step 2:
As the success message in the previous step indicates…
success Registered "my-package". info You can now run `yarn link "my-package"` in the projects where you want to use this package and it will be used instead. Done in 0.09s.
you can now change directory to any of your local projects and link “my-package” to it:
cd C:\code\my-project yarn link my-package
Now “my-packge” should appear as a link in the project’s node_modules
folder. That also works if your project uses npm instead of yarn.
But here I ran into an error for one of my projects:
Usage Error: Invalid destination; Can't link the project to itself
At first I thought I would have mistakenly run the command in “my-package” instead of my project folder. But that wasn’t the case. The actual reason was that I ran the command in a project which was marked as private.
If nothing works you can create a symlink in Windows manually with PowerShell. For example:
New-Item -ItemType SymbolicLink -Path C:\code\my-project\node_modules\@urql\exchange-graphcache -Target C:\code\my-project\urql\exchanges\graphcache
List all yarn-linked projects
Change directory to your project. The following command will list all dependencies that are linked to your project:
npm ls --depth=0 --link=true
Unlinking
Simply run yarn unlink my-package
with or without –global in your package.
C:\code\my-package>yarn unlink yarn unlink v1.22.19 success Unregistered "my-package". info You can now run `yarn unlink "my-package"` in the projects where you no longer want to use this package. Done in 0.08s.
After that, run yarn unlink "my-package"
in all projects that have been using it.