我似乎遇到了在已部署的实例中从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?
答案 0 :(得分:0)
这实际上是一个Linux问题而不是Node问题,因为这是一个权限问题 - 由npm运行的脚本nodemon没有正确的权限。
如果您使用npm run start
来调用nodemon
而您拥有正确的权限(例如root),npm
会将执行“切换”到{ {1}}并且在此过程中可能会将用户更改为没有root权限的用户,以确保安全:
如果使用root权限调用npm,那么它将更改uid 到用户配置指定的用户帐户或uid,其中 默认为无人。设置unsafe-perm标志以使用root运行脚本 特权。
如果您自己运行nodemon
(并且您拥有root权限),则会绕过“切换”,以便以root权限运行node_modules/nodemon/bin/nodemon.js
。
部署节点应用程序的最正确的方式是使用pm2之类的东西来管理进程,而不使用nodemon,因为nodemon主要用于监视更改并重新启动服务器(这大多只在开发环境中有用)。如果您仍想使用nodemon,可以combine it with the forever package with nodemon like explained here。