很好,所以我已经在Chef上安装了node和npm。但我不能使用它,除非我是root用户,因为Chef以root身份做所有事情,显然npm并不知道如何处理。文档没有说明如何处理这个问题,而且我所看到的其他任何地方都建议更改〜/ .npm的权限(这意味着要更改root用户的权限&〜?〜。。npm),这感觉真的错了。
允许盒子上的所有用户使用npm而不会遇到大量错误的正确安装过程是什么:
npm ERR! Error: Attempt to unlock selenium-webdriver@^2.44.0, which hasn't been locked
答案 0 :(得分:1)
首先让我确保我理解你的情景
如果我在那里正确理解了你,那么你将需要调用npm命令作为目标用户,并将当前工作目录设置为package.json
文件所在的项目目录。 / p>
您可以使用执行块执行此操作,但您需要找到一种方法来定义它应该执行的时间。根据您的部署的细粒度,您可以将其基于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命令,但不会这样,所以连续运行是安全的。
execute
资源是为数不多的非幂等资源
在这种情况下,该过程将作为nodejs用户生成(必须在执行时存在),因此前往~/.npm
的所有资源都将转到/home/nodejs/.npm
并且应归该用户及其主要组所有。
如果您无法以受限用户身份运行npm命令,只要您拥有相应的权限,就可以在命令中添加sudo
以允许npm install
运行作为受限用户,具有高程