Servidor de desarrollo de paquetes web para vue-cli: error genera EACCES

Mi entorno:

  • Centos7 a través de VirtualBox (instalado en Windows7)
  • Versión del nodo: 6.10.3
  • Versión Npm: 3.10.10
  • Estoy detrás de un proxy corporativo

Inicialicé un nuevo proyecto “vuetest” con vue-cli, y ahora quiero ejecutar un servidor de webpack. Yo uso el siguiente comando:

npm run dev 

Este comando es equivalente a “webpack-dev-server –open –hot”, aquí está mi archivo “package.json” para verificar:

 { "name": "vuetest", "description": "A Vue.js project", "version": "1.0.0", "author": "", "private": true, "scripts": { "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot", "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" }, "dependencies": { "vue": "^2.3.3" }, "devDependencies": { "babel-core": "^6.0.0", "babel-loader": "^6.0.0", "babel-preset-env": "^1.5.1", "cross-env": "^3.2.4", "css-loader": "^0.25.0", "file-loader": "^0.9.0", "vue-loader": "^12.1.0", "vue-template-compiler": "^2.3.3", "webpack": "^2.6.1", "webpack-dev-server": "^2.4.5" } } 

Pero me sale el siguiente error:

 > vuetest@1.0.0 dev /var/www/html/vuetest > cross-env NODE_ENV=development webpack-dev-server --open --hot Project is running at http://localhost:8080/ webpack output is served from /dist/ 404s will fallback to /index.html internal/child_process.js:319 throw errnoException(err, 'spawn'); ^ Error: spawn EACCES at exports._errnoException (util.js:1018:11) at ChildProcess.spawn (internal/child_process.js:319:11) at Object.exports.spawn (child_process.js:378:9) at module.exports (/var/www/html/vuetest/node_modules/opn/index.js:75:24) at reportReadiness (/var/www/html/vuetest/node_modules/webpack-dev-server/bin/webpack-dev-server.js:424:3) at Server. (/var/www/html/vuetest/node_modules/webpack-dev-server/bin/webpack-dev-server.js:404:4) at Server.g (events.js:292:16) at emitNone (events.js:86:13) at Server.emit (events.js:185:7) at emitListeningNT (net.js:1284:10) npm ERR! Linux 3.10.0-514.el7.x86_64 npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "run" "dev" npm ERR! node v6.10.3 npm ERR! npm v3.10.10 npm ERR! code ELIFECYCLE npm ERR! vuetest@1.0.0 dev: `cross-env NODE_ENV=development webpack-dev-server --open --hot` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the vuetest@1.0.0 dev script 'cross-env NODE_ENV=development webpack-dev-server --open --hot'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the vuetest package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! cross-env NODE_ENV=development webpack-dev-server --open --hot npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs vuetest npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls vuetest npm ERR! There is likely additional logging output above. npm ERR! Please include the following file with any support request: npm ERR! /var/www/html/vuetest/npm-debug.log 

Aquí está el contenido del archivo “npm-debug.log”:

 0 info it worked if it ends with ok 1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'dev' ] 2 info using npm@3.10.10 3 info using node@v6.10.3 4 verbose run-script [ 'predev', 'dev', 'postdev' ] 5 info lifecycle vuetest@1.0.0~predev: vuetest@1.0.0 6 silly lifecycle vuetest@1.0.0~predev: no script for predev, continuing 7 info lifecycle vuetest@1.0.0~dev: vuetest@1.0.0 8 verbose lifecycle vuetest@1.0.0~dev: unsafe-perm in lifecycle true 9 verbose lifecycle vuetest@1.0.0~dev: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/var/www/html/vuetest/node_modules/.bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/bdupre/.local/bin:/home/bdupre/bin 10 verbose lifecycle vuetest@1.0.0~dev: CWD: /var/www/html/vuetest 11 silly lifecycle vuetest@1.0.0~dev: Args: [ '-c', 11 silly lifecycle 'cross-env NODE_ENV=development webpack-dev-server --open --hot' ] 12 silly lifecycle vuetest@1.0.0~dev: Returned: code: 1 signal: null 13 info lifecycle vuetest@1.0.0~dev: Failed to exec dev script 14 verbose stack Error: vuetest@1.0.0 dev: `cross-env NODE_ENV=development webpack-dev-server --open --hot` 14 verbose stack Exit status 1 14 verbose stack at EventEmitter. (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:255:16) 14 verbose stack at emitTwo (events.js:106:13) 14 verbose stack at EventEmitter.emit (events.js:191:7) 14 verbose stack at ChildProcess. (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14) 14 verbose stack at emitTwo (events.js:106:13) 14 verbose stack at ChildProcess.emit (events.js:191:7) 14 verbose stack at maybeClose (internal/child_process.js:886:16) 14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5) 15 verbose pkgid vuetest@1.0.0 16 verbose cwd /var/www/html/vuetest 17 error Linux 3.10.0-514.el7.x86_64 18 error argv "/usr/bin/node" "/usr/bin/npm" "run" "dev" 19 error node v6.10.3 20 error npm v3.10.10 21 error code ELIFECYCLE 22 error vuetest@1.0.0 dev: `cross-env NODE_ENV=development webpack-dev-server --open --hot` 22 error Exit status 1 23 error Failed at the vuetest@1.0.0 dev script 'cross-env NODE_ENV=development webpack-dev-server --open --hot'. 23 error Make sure you have the latest version of node.js and npm installed. 23 error If you do, this is most likely a problem with the vuetest package, 23 error not with npm itself. 23 error Tell the author that this fails on your system: 23 error cross-env NODE_ENV=development webpack-dev-server --open --hot 23 error You can get information on how to open an issue for this project with: 23 error npm bugs vuetest 23 error Or if that isn't available, you can get their info via: 23 error npm owner ls vuetest 23 error There is likely additional logging output above. 24 verbose exit [ 1, true ] 

¿Alguien sabe como arreglarlo por favor?

Encontré la solución. En el archivo “package.json”, reemplacé:

 "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot" 

Por esto :

 "dev": "cross-env NODE_ENV=development webpack-dev-server --port 8080 --hot --host 0.0.0.0" 

Y ahora todo funciona, mi servidor, arranca normalmente.

Como dijo Emil, este es un problema con el módulo opn, porque xdg-open no es ejecutable. Tengo el mismo problema en un proyecto generado con vue-cli, que utiliza opn 5.1.0.

Simplemente haciendo chmod +x node_modules/opn/xdg-open resolveremos esto. Pero cada vez que se actualiza el módulo de nodo, este cambio se perderá.

Terminé comentando la llamada a opn en build / dev-server.js:

if (autoOpenBrowser && process.env.NODE_ENV! == ‘testing’) {

  //opn(uri) 

}

y abriendo manualmente mi navegador en http: // localhost: 8080

node_modules / opn / xdg-open no es ejecutable, si está en Linux, esto es lo que falla en la línea 75 de opn / index.js

o agrega esto

  console.log(cmd, args, cpOpts); 

antes de la línea 75 en node_modules / opn / index.js para ver exactamente qué comando falla

¿Puedes verificar si el puerto 8080 para tu servidor de desarrollo ya está en uso? Simplemente presione http: // localhost: 8080 en su navegador o cambie el puerto en webpack.config.js e intente nuevamente. Tuve un problema similar, tal vez eso es todo.

Al revisar su registro de seguimiento, este problema ocurre en el módulo opn, exactamente en la línea 75 de index.js

Error: spawn EACCES at exports._errnoException (util.js:1018:11) at ChildProcess.spawn (internal/child_process.js:319:11) at Object.exports.spawn (child_process.js:378:9) at module.exports (/var/www/html/vuetest/node_modules/opn/index.js:75:24)

buscando en ese archivo, vemos:

  50 } else { 51 if (opts.app) { 52 cmd = opts.app; 53 } else { 54 cmd = path.join(__dirname, 'xdg-open'); 55 } 56 57 if (appArgs.length > 0) { 58 args = args.concat(appArgs); 59 } 60 61 if (!opts.wait) { 62 // xdg-open will block the process unless 63 // stdio is ignored even if it's unref'd 64 cpOpts.stdio = 'ignore'; 65 } 66 } 67 68 args.push(target); 69 70 if (process.platform === 'darwin' && appArgs.length > 0) { 71 args.push('--args'); 72 args = args.concat(appArgs); 73 } 74 75 var cp = childProcess.spawn(cmd, args, cpOpts); 

Probablemente el nodo está intentando ejecutar xdg-open que es un script bash, por lo que necesita permiso de ejecución.

Tratar :

chmod a+x xdg-open

O, si estás en la raíz de tu proyecto:

chmod a+x node_modules/opn/xdg-open

PD: Normalmente todos estos archivos tienen los permisos correctos. En una situación desesperada, siempre puede eliminar el directorio node_modules y ejecutar npm install nuevo.