“ sudo npm start”无效,但“ npm start”有效

时间:2019-11-04 00:18:12

标签: node.js npm

所以我试图在端口80上运行我的react dev服务器,我需要使用sudo来使用PORT = 80

但是当我尝试使用来启动服务器时

sudo npm start

它返回如下错误:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: spawn cmd.exe ENOENT
    at _errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
    at onErrorNT (internal/child_process.js:372:16)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! counter-app@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the counter-app@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
the log file

日志文件:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/local/bin/npm', 'start' ]
2 info using npm@6.12.1
3 info using node@v8.10.0
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle counter-app@0.1.0~prestart: counter-app@0.1.0
6 info lifecycle counter-app@0.1.0~start: counter-app@0.1.0
7 verbose lifecycle counter-app@0.1.0~start: unsafe-perm in lifecycle true
8 verbose lifecycle counter-app@0.1.0~start: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/mnt/d/project/excercises/node/react$9 verbose lifecycle counter-app@0.1.0~start: CWD: /mnt/d/project/excercises/node/react/counter-app
10 silly lifecycle counter-app@0.1.0~start: Args: [ '-c', 'react-scripts start' ]
11 silly lifecycle counter-app@0.1.0~start: Returned: code: 1  signal: null
12 info lifecycle counter-app@0.1.0~start: Failed to exec start script
13 verbose stack Error: counter-app@0.1.0 start: `react-scripts start`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at EventEmitter.emit (events.js:214:7)
13 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at emitTwo (events.js:126:13)
13 verbose stack     at ChildProcess.emit (events.js:214:7)
13 verbose stack     at maybeClose (internal/child_process.js:925:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid counter-app@0.1.0
15 verbose cwd /mnt/d/project/excercises/node/react/counter-app
16 verbose Linux 4.4.0-18362-Microsoft                                                                                                                          17 verbose argv "/usr/bin/node" "/usr/local/bin/npm" "start"                                                                                                    18 verbose node v8.10.0                                                                                                                                         19 verbose npm  v6.12.1
20 error code ELIFECYCLE
21 error errno 1
22 error counter-app@0.1.0 start: `react-scripts start`
22 error Exit status 1
23 error Failed at the counter-app@0.1.0 start script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

但是如果我只使用“ npm start”,它就可以很好地工作,但是我想使用端口80

2 个答案:

答案 0 :(得分:1)

启动服务器时您是否已经尝试定义端口?

set PORT= 80 && node app.js

您还可以将package.json更新为仅使用npm run start。 package.json:

...
  "scripts": {
    "start": "set PORT= 80 && node app.js"
...

答案 1 :(得分:0)

也许您正在寻找错误的解决方案。用npm start运行sudo是一个坏主意。

相反;您可以转发端口 80 以响应端口 3000

sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 3000

https://coderwall.com/p/plejka/forward-port-80-to-port-3000

这是简单的方法;但是如果它是生产服务器,则可以搜索nginx方式

祝你好运