@gatsbyjs/parcel-namer-relative-to-cwd
Version:
Parcel namer that preserves directory structures to stabilize output and keep the hierarchy.
46 lines (30 loc) • 1.55 kB
Markdown
# `@gatsbyjs/parcel-namer-relative-to-cwd`
This [namer plugin](https://parceljs.org/plugin-system/namer/) is used by [Gatsby](https://www.gatsbyjs.com/) internally. You can reuse it inside your app if you want.
If you're just using Gatsby, you don't need to care about this package/plugin.
## Usage
```shell
npm install --save-dev @gatsbyjs/parcel-namer-relative-to-cwd
```
And inside your `.parcelrc`:
```
{
"extends": "@parcel/config-default",
"namers": ["@gatsbyjs/parcel-namer-relative-to-cwd", "..."]
}
```
## Why & How
By default, Parcel is trying to find common/shared directories between entries and output paths that are impacted by it. See [this issue comment](https://github.com/parcel-bundler/parcel/issues/5476#issuecomment-769058504) for more information.
With these inputs files:
```
a.html
sub/b.html
```
You get:
- `parcel build a.html` => `dist/a.html`
- `parcel build sub/b.html` => `dist/b.html`
- `parcel build a.html sub/b.html` => `dist/a.html`, `dist/sub/b.html`
You can see that `sub/b.html` entry might result in either `dist/b.html` or `dist/sub/b.html` (depending wether `a.html` is entry or not). This makes builds not deterministic, which is very problematic where entries are "optional".
This namer plugin stabilizes the output, so inside `distDir` the hierarchy is the same as entry file in relation to current working directory (CWD):
- `parcel build a.html` => `dist/a.html`
- `parcel build sub/b.html` => `dist/sub/b.html`
- `parcel build a.html sub/b.html` => `dist/a.html`, `dist/sub/b.html`