Nodejs + npm, installing modules on ntfs partition

11,474

Solution 1

Since version 1.2.21, npm has a new option for the install command. --no-bin-links

You can use if for installing a specific node module

npm install express --no-bin-links

and also for a package.json install

npm install --no-bin-links

With this option I've been able to install many npm modules without problems in my shared forlder inside the VM (Ubuntu guest, Windows Host)

The commit where the option was added to the npm code is b4c58617039c21c10889a9869f8e86a23e17d3a0

Solution 2

Try this - http://ahtik.com/blog/2012/08/16/fixing-your-virtualbox-shared-folder-symlink-error/

Works for me!

Basically you set a parameter

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

And then run the VM as an administrator....

Solution 3

The Symlink permissions, or the --no-bin-links didn't work for us. Instead we opted to move our node_modules away from the /vagrant share. We created a symlink from /vagrant/node_modules to /tmp/node_modules. You can only do this if your node_modules is not in version control. Check this first!

Also see http://kmile.nl/post/73956428426/npm-vagrant-and-symlinks-on-windows

Solution 4

I am pretty certain symlinks can't be created on the shared drive ("shared folder"). Even more impossible with a Windows host machine and a Linux guest.

The host machines are not aware of the filesystem of the guests. A guest machine is a blackbox for the host. You can't say to the host "Well this links to /etc/..." when the host doesn't know where this /etc is :).

So in short: unfortunately no.


In some more detail:

I would be really happy if I am wrong! It is a major pain in my development process.

I tried so many options. By default the filesystem that the "shared folders" use is vboxsf, something if not the same as samba (default network sharing protocol for windows) so:

  1. I tried using native Windows network sharing and then mounting the network drive in the guest as the guest and host are on the same network. The problem was still there.
  2. I tried running a NFS server on windows (Hanewin NFS Server) along with SFU/SUA (Windows Services for UNIX) but this has problems with GIT locks. Probably other problems as well - it was a while ago and I don't clearly remember
  3. I tried the reverse: sharing a directory on the virtual machine to windows. But that is stupid as all the files will be on the virtual box and is reaally slow to access on windows
  4. I was being stupid and I though "well let's mount a virtual drive on both windows and linux" - don't try this, corrupts the virtual disk. Something I should have known.

There might be a network sharing protocol other than samba and nfs which will perhaps copy the files whenever "symlink" creation is attempted? I don't know really.

However I haven't found one yet and also "locking" seems to to be a task of the file-system itself so I doubt any network protocol (unless having a dedicated registry of some sort for locks) can do this.

Solution 5

For anyone still having this problem after trying npm install --no-bin-links.

I wasn't able to get any of the above solutions to work when I came across a similar issue running npm install on a Laravel Homestead Vagrant box on a Windows 7 host using VirtualBox. The guest box has a mapped directory to the Windows file system.

The problem was causing various error messages and failed package installations. The one that is most relevant to the question was npm ERR! UNKNOWN, symlink '<some filename>'.

To fix this, I was able to successfully run npm install on the Git bash command line on Windows rather than bash on the guest Linux.

To do this, you will need to install Git for Windows and NodeJS (both on your Windows box).

e.g.

  1. Install Chocolatey https://chocolatey.org/
  2. choco install nodejs.install
  3. choco install git.install
  4. Run C:\Program Files (x86)\Git\Git Bash.vbs
  5. In the Git Bash command line, change directory to the location of your package.json file e.g. cd /c/projects/projectname
  6. Run npm install

Everything appears to install successfully.

Share:
11,474
Admin
Author by

Admin

Updated on June 14, 2022

Comments

  • Admin
    Admin almost 2 years

    I have a problem when installing npm modules. NodeJS is installed on Ubuntu 11.10 running on Virtual Box on Windows host. My project files are on NTFS partition (I have to share them with windows). When I try to install some npm module I get an error, and module is not installed. I've found out that problem occurs when npm tries to create symbolic links.

    Probably you can not create symlinks on NTFS partition, when I'm installing module "inside" Linux file system, everything works fine.

    How can I fix this? I don't want to resolve dependencies manually :/

  • antitoxic
    antitoxic about 11 years
    This is awesome! Sosnowski that is quick solution which will not need setting a vbox setting on each workstation as suggested by @Mahbub
  • antitoxic
    antitoxic about 11 years
    That is still showing me Error: UNKNOWN, symlink '../coffee-script/bin/cake' after I run npm install
  • antitoxic
    antitoxic about 11 years
    Oups - I needed to run the whole VBox as admin. I works fine now but it still is a bit bothersome to run this as admin every time.
  • Mahbub
    Mahbub about 11 years
    I know it's a pain :), you can set your VM to run as administrator all the time. Right click on virtual box > properties > Shotcut > Advanced ... > Run as administrator.
  • Mahbub
    Mahbub about 11 years
    Have your tried vagrant? Check this out - github.com/mitchellh/vagrant/issues/713#issuecomment-4416384
  • F21
    F21 about 11 years
    This should be marked as the correct answer. After spending hours trying to fix this and me tinkering with my cifs mount, thinking that it was some permission issue, this fixed it for me.
  • Jaro
    Jaro almost 11 years
    This is briliant solution!
  • Samuel Rossille
    Samuel Rossille over 9 years
    broken link "page not found..."
  • Chandu
    Chandu about 9 years
    Thanks a ton @blackjid
  • John Reid
    John Reid almost 8 years
    This also affects the Windows Subsystem for Linux so I'm glad that this has already been caught for NTFS filesystems.