Browse Source
* add configuration documentation * add markdown heading * add satisfyingremotes/origin/use-bnz
![gal@spitfire.co.il](/assets/img/avatar_default.png)
![GitHub](/assets/img/avatar_default.png)
2 changed files with 81 additions and 2 deletions
@ -0,0 +1,72 @@ |
|||||||
|
# Configuration |
||||||
|
|
||||||
|
fnm comes with many features out of the box. Some of them are not activated by default as they’re changing your shell default behavior, and some are just a feature flag to avoid breaking changes or just experimental until we decide it is worthwhile to introduce them. |
||||||
|
|
||||||
|
All these features can be configured by adding flags to the `fnm env` call when initializing the shell. For instance, if your shell set up looks like `eval "$(fnm env)"` then you can add a flag to it by changing it to `eval "$(fnm env --my-flag=value)"` |
||||||
|
|
||||||
|
Here’s a list of these features and capabilities: |
||||||
|
|
||||||
|
### `--use-on-cd` |
||||||
|
|
||||||
|
**✅ Highly recommended** |
||||||
|
|
||||||
|
`--use-on-cd` appends output to `fnm env`'s output that will hook into your shell upon changing directories, and will switch the Node.js version based on the requirements of the current directory, based on `.node-version` or `.nvmrc` (or `packages.json#engines#node` if `--resolve-engines` was enabled). |
||||||
|
|
||||||
|
This allows you do avoid thinking about `fnm use`, and only `cd <DIR>` to make it work. |
||||||
|
|
||||||
|
### `--version-file-strategy=recursive` |
||||||
|
|
||||||
|
**✅ Highly recommended** |
||||||
|
|
||||||
|
Makes `fnm use` and `fnm install` take parent directories into account when looking for a version file ("dotfile")--when no argument was given. |
||||||
|
|
||||||
|
So, let's say we have the following directory structure: |
||||||
|
|
||||||
|
``` |
||||||
|
repo/ |
||||||
|
├── package.json |
||||||
|
├── .node-version <- with content: `20.0.0` |
||||||
|
└── packages/ |
||||||
|
└── my-package/ <- I am here |
||||||
|
└── package.json |
||||||
|
``` |
||||||
|
|
||||||
|
And I'm running the following command: |
||||||
|
|
||||||
|
```sh-session |
||||||
|
repo/packages/my-package$ fnm use |
||||||
|
``` |
||||||
|
|
||||||
|
Then fnm will switch to Node.js v20.0.0. |
||||||
|
|
||||||
|
Without the explicit flag, the value is set to `local`, which will not traverse the directory tree and therefore will print: |
||||||
|
|
||||||
|
```sh-session |
||||||
|
repo/packages/my-package$ fnm use |
||||||
|
error: Can't find version in dotfiles. Please provide a version manually to the command. |
||||||
|
``` |
||||||
|
|
||||||
|
### `--enable-corepack` |
||||||
|
|
||||||
|
**🧪 Experimental** |
||||||
|
|
||||||
|
Runs [`corepack enable`](https://nodejs.org/api/corepack.html#enabling-the-feature) when a new version of Node.js is installed. Experimental due to the fact Corepack itself is experimental. |
||||||
|
|
||||||
|
### `--resolve-engines` |
||||||
|
|
||||||
|
**🧪 Experimental** |
||||||
|
|
||||||
|
Treats `package.json#engines#node` as a valid Node.js version file ("dotfile"). So, if you have a package.json with the following content: |
||||||
|
|
||||||
|
```json |
||||||
|
{ |
||||||
|
"engines": { |
||||||
|
"node": ">=20 <21" |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
Then: |
||||||
|
|
||||||
|
- `fnm install` will install the latest satisfying Node.js 20.x version available in the Node.js dist server |
||||||
|
- `fnm use` will use the latest satisfying Node.js 20.x version available on your system, or prompt to install if no version matched. |
Loading…
Reference in new issue