npm WARN tar EINVAL after WSL Fall Creators Update - npm

Issue:
I just updated my WSL installation after installing the Fall Creators Update and now when I run npm i I get the following warnings from npm I get probably 2-20 of these warnings from random packages each time I install, it's never consistent. Sometimes it even works, no warnings. I thought that this might be okay, but when I run my project npm run dev I get all sorts of errors. It seems to me that the packages aren't installing correctly. But on the occasion when it doesn't show warnings the application runs as expected. I tested with some random projects from GitHub and same issue.
Versions:
NPM Version: 5.5.1
NodeJS Version: 8.9.0
Other Factors: ZSH
ERROR:
npm WARN tar EINVAL: invalid argument, open '/mnt/c/Users/Me/Documents/project/node_modules/.staging/parse-json-07a114c7/index.js'
npm WARN tar EINVAL: invalid argument, open '/mnt/c/Users/Me/Documents/Project/node_modules/.staging/esrecurse-fe2bc2eb/package.json'
Notes:
Tried a fresh install of WSL, same issue
can install globally without issue, only seems to fail in the /mnt/** path.
Can confirm it works in the Linux folders, successful installation in home directory, but breaks on /mnt/**
EDIT: After much troubleshooting I decided to run without ZSH and switching back to using bash.exe instead of the suggested wsl.exe. First install worked. Testing further.

The issue was in fact with the Fall Creators Update. Many optimizations were made and it seems that something to do with symlinking mounted drives had issues. See all the technical conversation here
There are two solutions, first and recommended, the WSL team has already fixed and the fix is in Insiders Build 17035. This fix requires going to Settings -> Insiders -> Selecting "get Active Builds" and then "Fast Ring". Only do this if you are experienced in dealing with occasional breaks as it is essentially beta software.
Fix number two and recommended if you can't update or don't feel comfortable with Insiders Builds is to add this to your .bashrc file:
if ! mount | grep -q "C: on /mnt/c type drvfs (rw,noatime,fallback=1)"; then
echo "== Remount of C: drive required =="
pushd ~ > /dev/null
sudo umount /mnt/c
sudo mount -t drvfs -o noatime,fallback=1 C: /mnt/c
popd > /dev/null
fi
The .bashrc solution does remove many performance gains however so only do if really necessary.

Related

Environment variables (zsh terminal) installed through npm on MacOS 12.4 Monterey - SOLVED

Background:
Dear Stackoverflow community. I recently switched from Windows to MacOS and am at a loss how to configure environment variables. Many of the previous questions asked here are about bash instead of zsh.
Goal:
I am trying to install an npm package globally. For instance:
npm install -g vercel
or any other package, and use it in my Visual Studio Code terminal (also zsh). If I want to deploy code I have to use 'npx vercel deploy' every time. I want to be able to use "vercel deploy" but instead I get:
zsh: command not found: vercel
What I tried so far:
Installing the package in zsh and visual studio code terminals (didn't work)
Setting the path equal on both VS and terminal: export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
I learned that you need to add environment variabels to a .zshrc file. I don't seem to have a zshrc file. When I do:
sudo ~/.zshrc
Password: XXXXXX
sudo: /Users/vincent/.zshrc: command not found
I am getting another error.
I read in the zsh man file that you should use $HOME/.zshrc instead. Again I am getting the same errors:
vincent#Vincents-MacBook-Air-2 ~ % $HOME/.zshrc
zsh: permission denied: /Users/vincent/.zshrc
vincent#Vincents-MacBook-Air-2 ~ % sudo $HOME/.zshrc
sudo: /Users/vincent/.zshrc: command not found
Update 1:
#slebetman Thank you for your explanation. When I open the terminal I go to home via "cd $HOME" which puts me in in the home directory. However there is no way for me to create a .zshrc file in that directory. Neither via touch or vs code. I am getting the following error: "Unable to write file '/home/.zshrc' (Unknown (FileSystemError): Error: ENOTSUP: operation not supported on socket, open '/home/.zshrc')"
Update 2:
I did manage to find the .zshrc file in visual studio code under /etc. I hope this will work. I was able to overwrite the file with Sudo and add environment variables to it.
Add this to the file .zshrc file under /etc and force overwrite it:
export vercel=/Users/vincent/.npm-global/bin/vercel
Screenshots below for those who will try in the future:
Image with .zshrc file layout
Final remarks:
I don't understand how it is so difficult to add environment variables on Mac while everything else is so easy.
I have read many different questions on stackoverflow, and I can't seem to solve it. Also since I am a newbie I am not allowed to comment on there so I post here in the hope that anyone can help me :)
Best,
Vincent
Note that when you do:
npx vercel deploy
Npm will execute vercel for you without installing it. It does that by temporarily downloading vercel. If you want to run vercel directly without using npx then simply don't use npx. Install it instead:
npm install -g vercel
The -g flag installs the module globally and if the module has a CLI it will be available globally as well (note that depending on your setup you may need admin/sudo privileges to use the -g flag). Now you can run vercel by simply typing:
vercel deploy
This works in all operating systems supported by node.js and npm. That means you can even do this in Windows. In fact I use npm to distribute my tools in a simple cross-platform way so I don't have to support multiple package managers like chocolatey (Windows), homebrew (Mac OS), deb (Debian based distros), rpm (Redhat based distros) etc. (npm does not require your software to be written in node.js - I have published packages on npm written in tcl and bash).

Building ngx-bootstrap locally

Simple, I cloned the repository of ngx-bootstrap and tried to build it locally.
To execute npm install to took me about 4 hours (because of the infinite problems which I get)
after a huge effort, I managed to install the packages.
then comes the next step npm run build here I faced with the following problem
Building collapse module
Error: Command failed: C:\WINDOWS\system32\cmd.exe /q /s /c "npm run dist-to-modules"
'cp' is not recognized as an internal or external command,
operable program or batch file.
I understand that the cp is Linux based command and it will not work in windows, I tried to change to play with the command in the script section in the package.json but without luck, it did not work.
my question is, if somebody wants to build ngx-bootstrap on Windows, why there is no guide for them to do that, why it is only for Linux?
how should I change the following command
"dist-to-modules": "cp -R ./dist/. ./node_modules/ngx-bootstrap"
to make it work on windows?
I am really frustrated, building a library should not be such a hard task
You have to use copy instead of cp. Just update the script.
Oh yes, we had an issue with the Windows build, and, Barry helped with that :)
Gonna be fixed in 6.1.0 version, which will be released in a few weeks, I think, or, earlier

ENOSPC Error in create-react-app

create-react-app error
I get this error message when I run yarn start from my terminal... I've tried sudo killall node and many other process to clear the i-node yet no success.
I have also downgraded my create-react-app version to version 1.5.1 and yet I still have these errors...
Please can anyone help out?
You're most likely hitting the Unix limit of how many files a process can watch.
The following command should help:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
By default linux machine puts some limit on number of programs inotify program can watch/monitor.
On running the react development server, the create-react-app ask the inotify program to monitor more files than its limit. Babel and webpack in the creat-react-app are using chokidar to monitor files which in turn is using inotify program to monitor them, hence this crosses the limit of inotify program.
By running the following command the limit of inotify program is increased and issue is solved.
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
i faced the same issue twice...
first time i tried deleting whole node modules using
rm -rf ./node_modules
and installed it again (npm install) and it worked.
BUT, second time it did not.
this time i tried cleaning the unused dependencies from npm modules using,
npm clean-install
and it started the server again.
as it removes the unused dependencies thus decreasing the number of files to watch in a single process.

Npm updates sucessfully, but still shows old version

When I do a npm -v I see that I am still on 5.6.0. And keep getting prompts to do a npm i npm.
But I've done a sudo npm install npm#latest -g and double checked with a npm outdated -g --depth=0 to see that my global npm is at the latest already (6.0.0).
How do I resolve this conflict? Is the npm I'm using the latest or is it still the old one? Is it because my global is linked incorrectly or something?
Try closing the Terminal - once you open it again it should work, worked for me well.
*IvanD wrote this solution in a comment to the original post, I thought it's worth an answer post.
I can 100% vouch this works.
I got this from someone who teaches node.js.
Give NVM (Node Version Manager) a try. Do the commands in the following ordrer:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
command -v nvm
nvm install node
finally confirm that the update was successful
npm -v
Let's do a better solution if all of the mention methods not help you:
You need to install nvm (Node Version Manager)
After that just run:
nvm install 14
list your versions to see is version installed
nvm ls
and you will get list like this:
v10.2.0
v12.18.3
-> v14.10.0
system
default -> 14.10.0 (-> v14.10.0)
node -> stable (-> v14.10.0) (default)
stable -> 14.10 (-> v14.10.0) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/erbium (-> v12.18.3)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.22.0 (-> N/A)
lts/erbium -> v12.18.3
Switch default version like this:
nvm alias default 14.10.0
And check:
node -v
If print v14.10.0 you are ready to rock, if not:
nvm use 14
and check again.
This need to work like a charm and you will be happy.
Check your /usr/local/lib folder. I had the same problem and a node_modules folder in here. After removing it and rerunning [sudo] npm install npm#latest -g it showed and used the correct version.
sudo npm install -g n
If you want latest stable version
sudo n stable
If you want the latest version
sudo n latest
Then restart computer
I had this issue today with Node installer node-v10.16.0-x64.msi. Even after installing it I got the node version from npm -v as 3.10... and my react app would fail to start :(
It seems that node creates a folder in APPDATA at %AppData%\Roaming\npm
There was an old npm.exe lying there and this was in my Windows Path at user level. The user level Path overrides the system level Path where the new installer had added its path. The user override caused the new npm to not be found. Solution: Shift-Delete %AppData%\Roaming\npm ! :D Remove and reinstall with node-v10.16.0-x64.msi
Now npm -v gives 6.9.0!
If you have tried all the mentioned approach like :-
sudo npm install -g n
sudo n stable
or
sudo npm install npm#latest -g
still npm -v showing you the older version, once try to close your terminal and open a new one and check.
I found this command line that worked for me.
Update from version 12.18 to the latest version 15.2 correctly.
I hope this is useful:
nvm install node --reinstall-packages-from=node
I think your question is replecated and already has an answer.
First, The LTS and current version of NPM is 5.6.0 for both Node 8.11.1 (LTS) and Node 10.0.0 (Latest current version) according to the official documentation.
Otherwise, sudo npm install npm#latest -g should install the latest version NPM globally.
Search for a node_modules folder in your home directory, rename it or delete it, then try again.
First uninstall your installed nodejs from Control Panel\All Control Panel Items\Programs and Features.
Delete nodejs folder from the Program Files (x86) folder.
Now install new version and check it once.
Though this is an old question and the answer might not be relevant but I found myself into such situation many time, sometimes restarting the server is not a solution because other process will get effected. So you need to refresh the terminal without actually restarting the server and for that you may run exec bash and that will certainly help.
I was facing the same error today.Updated npm version does not reflect.
This is how I resolved it.
A lot of post suggested to use the command npm cache clean --f. But, it did not work for me. Hence, I deleted the "npm" and "npm-cache" folders from the location C:\Users\SearchYourUserName\AppData\Roaming
Uninstalled the existing node.
Re-Installed node version v10.x.x. I downloaded the node-v10.22.1-x64.msi file from https://nodejs.org/dist/latest-v10.x/ and installed it.
Then checked the npm version. It had worked.
Actually this could be happening due to mistakes like you installing packages using yarn ex:
// update the version number in package.json then
yarn install
and trying to run scripts using npm like
npm run start
Actually I did this mistake.
So make sure to use either yarn or npm, but not both.
I faced a similar issue. I had node v14.15.4 installed on ubuntu 18, but when i used node -v it showed v11.0.0.
To check all the node versions available on your system using nvm, use
nvm ls
To set the newly installed node version as the default, use
nvm alias default <version>
Then, just close the terminal and open a new terminal to check the node version.
Problem summary
npm -v # 6.xx
npm install npm#latest -g
npm -v # still the same, but should be 7.xx
Solution based on the answer of fypnlp.
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
The terminal now wants to configure some ~/.zshrc file which I don't have on my Mac yet. So let’s create it
nano ~/.zshrc
and paste
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
Now restart the terminal and run
command -v nvm # should return "nvm"
nvm install node
npm -v # now it’s 7.xx yay!
I have this same symptom but none of the answers helped and I finally found the issue.
It may not be exactly the same as the OP's but I think it is along the same lines. #Kelvin Zhao's solution of un-installing and re-installing worked for him but not for me so this might be useful for others.
My issue ended up being that I use brew and (I can't remember how exactly) but I seem to be have an old version in the brew Celler.
Brew didn't know about it, or couldn't tell me as I do a brew uninstall node and it says its doesn't exist.
When I run node -v or npm -v I get the old versions.
I uninstalled and reinstalled using brew and npm and sudo npm etc didn't do it. it showed the correct versions being installed but node -v still showed the old.
Turns out there is a version in my /usr/local/Celler directory named node#14.
So running brew uninstall node#14 got rid of that and now node -v doesn't work anymore.
Now re-installing node works. brew install node
More info for further details for those interested.
I wanted to find out where I still had node installed so I did echo $PATH as it had to be somewhere in the path else node -v wouldn't be recognised.
Turns out I had /usr/local/opt/node#14 in my path (which linked to /usr/local/Celler/node#14)
That is how I found it.
And now I think I remember how it got there. I'm 90% sure that I did an upgrade of node and brew asked what to do with the old version and I think I said to keep it.
And that was my mistake that lead me here (and where I think OP's situation differs)
In my case, I wanted to use Version 18 and it was showing 16. I'm using homebrew on my mac and the command that worked for me was the following:
brew uninstall node#16
And voila the version that was showing after is 18.
I had issue with VS Code when I did nvm alias in its own terminal, even after ran alias command, the version kept switching back to old version even I open a new terminal within the VS Code. But as stupid as it sounds, close and reopen the vscode for me worked, after I set the version in an independent terminal.

Cloud9, use previous version of LESS compiler

I'm trying to downgrade to a previous version of the LESS compiler, an update is causing my program to crash. I can't figure out how to do this... I've done npm install -g less#2.5.2 however when I run lessc -v it returns 2.6.0 again...
How can I change this?
After looking for a while, I finally stumbled upon this: https://docs.c9.io/docs/installing-npm-modules
The global flag does not actually work as I had previously thought it did on Cloud9 (due to their security implementations). The command must be used within the project folder itself.
I needed ones to downgrade lessc to an old version and it did not work for me straight forward
the problem was because npm install differs from sudo npm install
now to fix the problem walkthrough with me, but I not sure if non-linux users can do the same, even though simply sudo is the same as run as administrator
uninstall less using npm uninstall -g less --save
I actually used whereis less to find it, then sudo rm -rf /usr/local/lib/node_modules/less
install the wanted version of less using sudo npm install -g less#1.6.3
check lessc version using lessc -v
hope this helps and
happy maintaining legacy apps