Yarn (Cheat Sheet)
yarn init
Use yarn init
to initialize a Node.js project and create a package.json
file.
yarn add --dev
and yarn remove
Use yarn add --dev
to add a package to the devDependencies
section of package.json
. Or use
yarn add -D
as a shortcut.
yarn link
example
How to use a local branch of an NPM project for testing purposes, e.g. a local branch of viem
.
-
Checkout the local branch of
viem
that you want to test (git checkout <branch>
) -
Build the local branch of
viem
(usingbun install
andbun run build
in this case) -
Navigate to the output directory in
viem
(in this casesrc
) -
Run
yarn link
to create a symlink to the local branch ofviem
.This will create a symlink in the global
node_modules
directory, which can be used by other projects. -
Navigate to the project that will use the local branch of
viem
(in this casecelo-org/txtypes
) -
Run
yarn link viem
to create a symlink to the local branch ofviem
.This will create a symlink in the local
node_modules
directory, which will be used by the project. If you runyarn install
in the project, it will use the local branch ofviem
instead of the version from npm. You can see this in thepackage.json
file of the project, which will have a line like this:"viem": "link:../viem/src"
-
Work and test with the local branch of
viem
in the project as though it was a published version ofviem
(celo-org/txtypes
in this case) -
When you are done, run
yarn unlink viem
in the project (celo-org/txtypes
in this case) to remove the symlink to the local branch ofviem
.This will remove the line from the
package.json
file of the project, and will remove the symlink from the localnode_modules
directory. If you runyarn install
in the project, it will use the version ofviem
from npm again. -
Run
yarn unlink
in the output directory ofviem
(src
in this case) to remove the symlink to the local branch ofviem
.This will remove the symlink from the global
node_modules
directory.
Global packages
Upgrade global package (example @celo/celocli
)
Source: chatGPT
Upgrade @celo/celocli
globally with yarn global add @celo/celocli@latest
.
Check the version afterward with yarn global list @celo/celocli
(or celocli --version
).
Find path to global packages
Source: chatGPT
With nvm
, each Node.js version has its own separate set of globally installed packages, so if you
switch Node versions with nvm
, the path to globally installed packages like celocli
may change.
To find the installation paths of global packages for the current Node version, use:
$ npm root -g
/Users/arthur/.nvm/versions/node/v18.16.1/lib/node_modules
- This command shows the directory where global libraries are installed by npm.
- The output is the path to the
node_modules
directory where npm stores the globally installed packages. - For example, if
npm root -g
returns/usr/local/lib/node_modules
, your global npm packages are located in this directory.
$ yarn global bin
/opt/homebrew/bin
- This command shows the directory where global executable binaries installed by Yarn are located.
- This is the directory you need to include in your PATH environment variable to be able to run globally installed Yarn packages from the command line.
- The path provided by
yarn global bin
is not where Yarn’s global packages are stored in their entirety (like libraries and dependencies), but specifically where the executables (the command-line tools) are placed.
Key differences between npm root -g
and yarn global bin
. They are similar in that they both
relate to the installation paths of global packages, but they serve slightly different purposes and
can point to different locations.
-
Location of Installations: While npm installs both the libraries and their executables in the same
node_modules
directory, Yarn typically separates them. Yarn installs the actual package contents in a global location which is not directly exposed byyarn global bin
and places the executables in the directory reported byyarn global bin
. -
Integration with the Shell: For the globally installed packages’ binaries to be accessible from the command line, the path provided by
yarn global bin
must be added to the PATH environment variable. npm, on the other hand, usually handles this automatically during Node.js installation, so global npm binaries are typically available in the command line without extra configuration. -
Differences in Environment Configuration: Because of these differences, managing global packages with npm and Yarn might require different configurations in your shell environment. This is especially important when working in development environments where both package managers are used.
Fix package version problems related to PATH
Source: chatGPT
For example, @celo/celocli
v3.1.0 is installed, but version is not found:
$ yarn global add @celo/celocli@latest
# ...
success Installed "@celo/[email protected]" with binaries:
- celocli
✨ Done in 50.26s.
$ celocli --version
› Warning: @celo/celocli update available from 3.0.2 to 3.1.0.
@celo/celocli/3.0.2 darwin-arm64 node-v18.16.1
$ yarn global list @celo/celocli
yarn global v1.22.19
info "@celo/[email protected]" has binaries:
- celocli
✨ Done in 2.32s.
It seems like there’s a discrepancy between the version of celocli
installed via Yarn and the
version that’s being invoked in the terminal. This issue can often arise due to path configurations
and how different Node.js versions manage global packages.
Here are a few steps to diagnose and resolve this issue:
1. Check the PATH for Yarn’s Global Binaries
- Yarn installs global binaries in a directory that may not be automatically included in your
system’s PATH. Run
yarn global bin
to find out where Yarn’s global binaries are located. - Once you have this path, you need to ensure it’s included in your PATH environment variable. You
can do this by adding a line to your
~/.zshrc
or~/.bashrc
file, like so:export PATH="$(yarn global bin):$PATH"
- After modifying the file, reload your shell configuration with
source ~/.zshrc
or open a new terminal session.
2. Verify the Active Version of celocli
- After updating the PATH, try running
celocli --version
again. If the PATH was the issue, it should now correctly show version 3.1.0.
3. Check for Multiple Installations
- It’s possible that
celocli
is installed both via npm and Yarn, leading to version conflicts. You can check this by runningnpm list -g @celo/celocli
andyarn global list @celo/celocli
to see if the package is installed with both package managers. - If it’s installed with npm as well, you might consider uninstalling the npm version to avoid
confusion. Use
npm uninstall -g @celo/celocli
to remove the npm-installed version.
4. Use nvm to Manage Node Versions
- Since you’re using nvm, ensure you’re in the correct Node.js version where you installed the new
celocli
. Usenvm use 18.16.1
or the version you prefer, then try runningcelocli --version
again.
5. Clear Any Caching
- Sometimes, old versions of binaries can be cached in your shell. Clearing your shell’s cache can
help. You can do this by running
hash -r
in your terminal.
6. Reinstall celocli
- If none of the above solutions work, consider uninstalling
celocli
and then reinstalling it. First, uninstall it using Yarn:yarn global remove @celo/celocli
. Then, reinstall it:yarn global add @celo/celocli@latest
.