太好了,所以我已经在Chef上安装了node和npm.但我不能使用它,除非我是root用户,因为Chef以root身份做所有事情,显然npm不知道如何处理.文档没有说明如何处理这个问题,而且我看到的其他任何
允许盒子上的所有用户使用npm而不会遇到大量错误的正确安装过程是什么:
npm ERR! Error: Attempt to unlock selenium-webdriver@^2.44.0, which hasn't been locked首先让我确保我正确理解你的场景
>您已安装Node.js.
>您已安装NPM
>您已经制定了Node.js项目并希望使用NPM(在package.json中定义的那些)安装其依赖项
如果我在那里正确理解你,那么你将需要调用npm命令作为目标用户,并将当前工作目录设置为package.json文件所在的项目目录.
您可以使用执行块执行此操作,但您需要找到一种方法来定义它应该执行的时间.根据您的部署的细粒度,您可以将其基于package.json更改,例如:
cookbook_file 'package.json' do source 'package.json' notifies :run, 'execute[npm_install]', :immediately end execute 'npm_install' do command 'npm install' user 'nodejs' cwd '/opt/nodejs/myapp/' action :nothing end
这样,只要你的package.json文件发生变化,它就会重新运行npm install命令,但不会这样,因此连续运行是安全的.
执行资源是少数不是幂等的资源之一
在这种情况下,该进程将作为nodejs用户生成(必须在执行时存在),因此任何前往〜/ .npm的资源都将转到/home/nodejs/.npm并且应由该用户拥有并且小组.
如果您无法以受限用户身份运行npm命令,只要您具有相应的权限,就可以在命令中添加sudo以允许npm install作为受限用户运行,具有提升
编辑:我刚刚注意到这个问题是两年了….