用于 vue-cli 的 Webpack 开发服务器:错误生成 EACCES
Webpack dev server for vue-cli: Error spawn EACCES
我的环境:
- 通过 VirtualBox 的 Centos7(安装在 Windows7 上)
- 节点版本:6.10.3
- Npm 版本:3.10.10
- 我在公司代理后面
我用vue-cli初始化了一个新项目"vuetest",现在我想运行一个webpack服务器。
我使用以下命令:
npm run dev
此命令等同于 "webpack-dev-server --open --hot",这是我要检查的 "package.json" 文件:
{
"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"
}
}
但我收到以下错误:
> 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.<anonymous> (/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
"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.<anonymous> (/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.<anonymous> (/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 ]
请问有人知道怎么解决吗?
您能检查一下您的开发服务器的端口 8080 是否已被使用吗?只需在浏览器中点击 http://localhost:8080 或更改 webpack.config.js 中的端口,然后重试。我遇到了类似的问题,也许就是这样。
我找到了解决方案。
在 "package.json" 文件中,我替换了:
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot"
通过这个:
"dev": "cross-env NODE_ENV=development webpack-dev-server --port 8080 --hot --host 0.0.0.0"
现在一切正常,我的服务器正常启动。
node_modules/opn/xdg-open 不可执行,如果你在 linux 这是 opn/index.js 第 75 行
失败的原因
或添加此
console.log(cmd, args, cpOpts);
在 node_modules/opn/index.js 中的第 75 行之前,以准确查看哪个命令失败
正如 Emil 所说,这是 opn 模块的问题,因为 xdg-open 不可执行。
我在使用 vue-cli 生成的项目中遇到了同样的问题,该项目使用 opn 5.1.0.
只需执行 chmod +x node_modules/opn/xdg-open
即可解决此问题。但是每次更新节点模块时,此更改都会丢失。
我最终在 build/dev-server.js 中评论了对 opn 的调用:
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
//opn(uri)
}
上手动打开我的浏览器
检查你的跟踪日志,这个问题发生在模块 opn 中,正好在 index.js
的第 75 行
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)
查看该文件,我们看到:
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);
可能节点正在尝试 运行 xdg-open
这是一个 bash 脚本所以它需要执行权限。
尝试:
chmod a+x xdg-open
或者,如果您位于项目的根目录中:
chmod a+x node_modules/opn/xdg-open
PS: 通常所有这些文件都有正确的权限。在绝望的情况下,您总是可以再次删除目录 node_modules
和 运行 npm install
。
我的环境:
- 通过 VirtualBox 的 Centos7(安装在 Windows7 上)
- 节点版本:6.10.3
- Npm 版本:3.10.10
- 我在公司代理后面
我用vue-cli初始化了一个新项目"vuetest",现在我想运行一个webpack服务器。 我使用以下命令:
npm run dev
此命令等同于 "webpack-dev-server --open --hot",这是我要检查的 "package.json" 文件:
{
"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"
}
}
但我收到以下错误:
> 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.<anonymous> (/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
"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.<anonymous> (/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.<anonymous> (/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 ]
请问有人知道怎么解决吗?
您能检查一下您的开发服务器的端口 8080 是否已被使用吗?只需在浏览器中点击 http://localhost:8080 或更改 webpack.config.js 中的端口,然后重试。我遇到了类似的问题,也许就是这样。
我找到了解决方案。 在 "package.json" 文件中,我替换了:
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot"
通过这个:
"dev": "cross-env NODE_ENV=development webpack-dev-server --port 8080 --hot --host 0.0.0.0"
现在一切正常,我的服务器正常启动。
node_modules/opn/xdg-open 不可执行,如果你在 linux 这是 opn/index.js 第 75 行
失败的原因或添加此
console.log(cmd, args, cpOpts);
在 node_modules/opn/index.js 中的第 75 行之前,以准确查看哪个命令失败
正如 Emil 所说,这是 opn 模块的问题,因为 xdg-open 不可执行。 我在使用 vue-cli 生成的项目中遇到了同样的问题,该项目使用 opn 5.1.0.
只需执行 chmod +x node_modules/opn/xdg-open
即可解决此问题。但是每次更新节点模块时,此更改都会丢失。
我最终在 build/dev-server.js 中评论了对 opn 的调用:
上手动打开我的浏览器if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
//opn(uri)
}
检查你的跟踪日志,这个问题发生在模块 opn 中,正好在 index.js
的第 75 行
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)
查看该文件,我们看到:
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);
可能节点正在尝试 运行 xdg-open
这是一个 bash 脚本所以它需要执行权限。
尝试:
chmod a+x xdg-open
或者,如果您位于项目的根目录中:
chmod a+x node_modules/opn/xdg-open
PS: 通常所有这些文件都有正确的权限。在绝望的情况下,您总是可以再次删除目录 node_modules
和 运行 npm install
。