我正在通过“nodejs” Recipe 安装 Node 和 npm,并且我通过
包含配方include_recipe "nodejs::npm"
我已经安装了我想要的软件包,如下所示:
%w( dateformat aws2js optparse cloudwatch2graphite).each do |npm_package|
nodejs_npm npm_package
end
Chef 说它已成功安装它们。
当我登录到盒子并输入 npm list
时,无论我是用户 root
还是用户 vagrant
,它都会返回空。
为什么包列表是空的?是用户上下文问题吗?
其次,如何运行全局安装的软件包,例如cloudwatch2graphite
。
当它作为全局包安装时,我就这样做
node cw2graphite.js
从任何地方让它运行?
奖励积分:
出于好奇,chef 在 vagrant 和 box 上都以什么用户身份运行?
最佳答案
经过一番摸索,我意识到我做错了什么。
使用 npm 来对全局包做任何事情,你必须使用 -g
事后看来这是显而易见的,但我不太喜欢 Node ,所以这是一个很容易犯的错误。
所以要列出全局包:
npm -g list
但是,在运行脚本时您应该执行以下操作:
npm -g run <package-name> <package-script>
当我尝试使用它来启动 cloudwatch2graphite 时,没有任何反应。
也就是说,我可以通过执行以下操作来使其工作:
node `npm -g root`/<package-name>/<script-name>.js
关于node.js - Chef 安装 Node 、npm 和包并运行它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547218/