Open MarkGriffiths opened 5 years ago
The cause is using __dirname
to resolve the root path.
If a module is link
ed while being used locally in an app, the __dirname
in app-root-path
may not overlap with the app's path.
It makes using npm link
or yarn link
quite a hassle. Is there an easy way to fix this, or perhaps app-root-path
is simply not intended to be used in a NPM module?
Ran into this issue in an npm module I was developing. It worked great when actually npm/yarn installed, but not when linked. I ended up just creating a workaround option in my package for project root. However, it'd be great if there was a fallback if linked to somehow get the running project's root.
same issue here( Does not work when creating custom package for npm, it starts referring to the package project directory.
I have to share an interesting bug that caused an outage and took me a long time to figure out and is directly related to this issue:
Basically:
app-root-path
that uses _dirname
which can only happen in prod and is impossible to reproduce locally.Exactly like what @jorgechen said.
Same problem with pnpm workspaces.
Temporarily, I solved the issue by defining a APP_ROOT_PATH
environment var.
"scripts": {
"dev": "APP_ROOT_PATH=`pwd` my-dev-command"
}
I've been trying to find a solution for this, but it's not straightforward. The best non-custom workaround for my use case is the INIT_CWD
environment variable, but this assumes that you ran a script with npm run
(or variant, like pnpm run
).
I only noticed this today when changes in
globby
starting throwing path errors, so might have been there a while and I just didn't notice.Under node v11, working in an app with the following pattern:
app-root-path
is used in each shared lib. When these are installed withnpm install
, the libs correctly report the app's root path. In development, when the libs are linked withnpm link
,app-root-path
reports the root path of the lib module, not the app.