Laravel Homestead, npm install --no-bin-links erro

2019-03-05 23:41发布

问题:

I am using fresh Homestead (box version 0.5) for a fresh Laravel 5.3 app. Host OS is Windows 10.

I get this error when running npm install --no-bin-links

npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm ERR! Linux 4.4.0-22-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "--no-bin-links"
npm ERR! node v5.12.0
npm ERR! npm  v3.8.6

npm ERR! Maximum call stack size exceeded
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR! /home/vagrant/t1/t1/npm-debug.log

npm-debug.log

.........
71199 silly build replace-ext@0.0.1
71200 silly build vinyl@1.2.0
71201 silly build require-dir@0.3.1
71202 silly build require-directory@2.1.1
71203 silly build require-main-filename@1.0.1
71204 silly build resolve@1.1.7
71205 silly build rechoir@0.6.2
71206 silly build resolve-url@0.2.1
71207 silly build rev-hash@1.0.0
71208 silly build rev-path@1.0.0
71209 silly build right-align@0.1.3
71210 verbose stack RangeError: Maximum call stack size exceeded
71210 verbose stack     at process.stderr (internal/process/stdio.js:23:46)
71210 verbose stack     at isTTY (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js:11:17)
71210 verbose stack     at Object.ProgressBar.show (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js:132:8)
71210 verbose stack     at Object.ProgressBar.pulse (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/gauge/progress-bar.js:124:8)
71210 verbose stack     at EventEmitter.log.emitLog (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:178:40)
71210 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:170:8)
71210 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:231:21)
71210 verbose stack     at tracker.(anonymous function) [as silly] (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:79:19)
71210 verbose stack     at module.exports (/usr/lib/node_modules/npm/lib/install/action/build.js:8:7)
71210 verbose stack     at actions.(anonymous function) (/usr/lib/node_modules/npm/lib/install/actions.js:48:12)
71211 verbose cwd /home/vagrant/t1/t1
71212 error Linux 4.4.0-22-generic
71213 error argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "--no-bin-links"
71214 error node v5.12.0
71215 error npm  v3.8.6
71216 error Maximum call stack size exceeded
71217 error If you need help, you may report this error at:
71217 error     <https://github.com/npm/npm/issues>
71218 verbose exit [ 1, true ]

without --no-bin-links it works (of course if not inside of shared folder)

Updated node and npm (6.9.1, 3.10.8), the same issue.

回答1:

I have developed a particular method to make it all work. Here are the basic steps:

  • First, make a directory out of the Vagrant shared folder. It could be, e.g., '/home/vagrant/node'.
  • Right there, we would copy the package.json file from our Laravel installation to tell npm what to install... Note that the recently created 'node' directory is in a Unix system, nothing to do with our Windows host machine (as it is not part of a shared folder between both).
  • Third, we would run npm install command (without the --no-bin-links options as Unix supports symbolic links. There should be no errors ;)
  • Finally, we would move the 'node_modules' directory right back to our Laravel installation folder (the shared one), BUT having run the vagrant up command from a console with Admin Privileges in Windows host machine. Otherwise, trying to move the created symbolic links would result in an error.

It will all work as it is the Unix machine that serves the Laravel app. This process will help you install Laravel Mix without problems.

Cheers!



回答2:

You can try this, as it is the system I usually use:

> npm install --no-bin-links
> npm install --no-bin-links
> npm rebuild node-sass

The first npm install ususally errors out with the "Maximum call stack size exceeded.". The second npm install picks up where it left off and finishes up the install. node-sass is usually broken at this point, so the npm rebuild fixes the node-sass installation.