繁体   English   中英

在部署环境中启动nodemon的正确方法是什么?

[英]Whats the proper way to start nodemon on a deploy environment?

我似乎在部署的实例中从node_modules运行nodemon时遇到问题。

我的package.json中大概有这个

{
   ...
  "version": "0.0.3",
  "main": "dist/src/server.js",
  "description": "Persistence Layer",
  "engines": {
    "node": "~6.7"
  },
  "scripts": {
    "start": "nodemon",
  },
"dependencies": {
    ...
    "nodemon": "^1.11.0",
    ...
  }
}

我的nodemon.json文件中有以下内容

{
  "restartable": "rs",
  "verbose": true,
  "debug": 5858,
  "delay": 1,
  "watch": [
    "dist/",
    "node_modules/"
  ],
  "ext": "js",
  "args": [
    "--debug=5858",
    "--max_old_space_size=6384",
    "--optimize_for_size",
    "--max_executable_size=6384",
    "--stack_size=6384"
  ]
}

当我尝试npm run start时,我得到以下信息:

jrlil@28178a64e860:/app# npm run start
npm info it worked if it ends with ok
npm info using npm@3.10.8
npm info using node@v6.9.1
npm info lifecycle api@0.0.3~prestart: api@0.0.3
npm info lifecycle api@0.0.3~start: api@0.0.3

> api@0.0.3 start /app
> nodemon

sh: 1: nodemon: Permission denied

npm info lifecycle -api@0.0.3~start: Failed to exec start script
npm ERR! Linux 3.10.0-514.16.1.el7.x86_64
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "start"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8
npm ERR! code ELIFECYCLE
npm ERR! -api@0.0.3 start: `nodemon`
npm ERR! Exit status 126
npm ERR!
npm ERR! Failed at the -api@0.0.3 start script 'nodemon'.
npm ERR! Make sure you have the latest version of node.js and npm installed.

但是,当我使用以下命令运行它时,一切正常。

$node node_modules/nodemon/bin/nodemon.js
[nodemon] 1.12.1...

为什么npm run无法查看我的node_modules文件夹并启动nodemon?

实际上,这是一个Linux问题,而不是Node问题,因为这是一个权限问题-由npm运行的脚本nodemon没有正确的权限。

如果您使用npm run start调用nodemon拥有正确的权限(例如root),则npm将执行nodemonnodemon ,在此过程中,为了安全nodemon ,可能nodemon用户更改为没有root权限的用户:

从文档:

如果npm是用root特权调用的,则它将uid更改为用户帐户或用户配置指定的uid,默认情况下为none。 设置unsafe-perm标志以使用root特权运行脚本。

如果您自己运行node_modules/nodemon/bin/nodemon.js (并且具有root权限),它将绕过该“传递”,以便nodemon.js以root权限运行。

部署一个节点应用的最正确的方法是使用类似PM2管理流程,而不是使用nodemon因为nodemon主要是用来监视更改并重新启动服务器(其中大部分是只在开发环境中很有用)。 如果仍要使用nodemon,可以将其与nodemon的永久软件包结合使用,如此处所述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM