如何使用Chef安装nodejs和npm,以便root以外的用户可以使用它

时间:2015-05-15 04:46:38

标签: node.js npm chef

很好,所以我已经在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

1 个答案:

答案 0 :(得分:1)

首先让我确保我理解你的情景

  • 您已安装Node.js
  • 您已安装NPM
  • 您已经制定了Node.js项目并希望使用NPM (在package.json中定义的那些)安装其依赖项

如果我在那里正确理解了你,那么你将需要调用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运行作为受限用户,具有高程

编辑:我刚刚注意到这个问题已经有两年了......