如何与Chef一起安装nodejs和npm,这样root以外的用户就可以使用它了

太棒了,所以我已经和主厨一起安装了node和npm。 但我不能使用它,除非我是根,因为厨师做的一切都是根,显然npm不知道如何处理。 文档没有提到如何处理这个问题,在我看过的其他地方build议改变〜/ .npm(这意味着改变根用户的〜/ .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文件所在的项目目录中。

你可以用一个execute块来完成,尽pipe你需要find一个方法来定义它的执行时间。 根据您的部署的细粒度,您可以将其从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资源是less数不幂等的之一

在这种情况下,这个过程将作为nodejs用户(这将在执行时必须存在),所以任何前往~/.npm资源~/.npm将转到/home/nodejs/.npm ,并由该用户及其用户拥有小学组

如果您无法以限制用户的身份运行npm命令,只要您具有相应的权限,则可以将sudo添加到该命令以允许npm install以限制用户的身份运行

编辑:我只是注意到这个问题是两岁… … –