Deployment 如何使用npm在当前目录中安装package.json依赖项

Deployment 如何使用npm在当前目录中安装package.json依赖项,deployment,node.js,dependencies,npm,Deployment,Node.js,Dependencies,Npm,我有一个web应用程序:fooapp。我在根目录中有一个package.json。我想将所有依赖项安装在特定的节点\u模块目录中。我该怎么做 我想要什么 假设我有两个widget依赖项。我希望最终得到如下目录结构: node_modules/ widgetA widgetB fooapp/ package.js lib .. 我得到了什么 当我运行npm install fooapp/时,我得到以下信息: node_modules/ fooapp/ node_m

我有一个web应用程序:fooapp。我在根目录中有一个
package.json
。我想将所有依赖项安装在特定的
节点\u模块目录中
。我该怎么做

我想要什么 假设我有两个
widget
依赖项。我希望最终得到如下目录结构:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..
我得到了什么 当我运行
npm install fooapp/
时,我得到以下信息:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..
npm在node_modules目录中复制我的应用程序目录,并将包安装在另一个node_modules目录中

我理解这对于安装软件包是有意义的。但是我不需要将我的web应用程序放在其他东西里面,我直接运行它。我正在寻找一种简单的方法将依赖项安装到特定的节点模块目录中。

正在运行:

npm install
从应用程序目录内部(即package.json所在的位置)将安装应用程序的依赖项,而不是将其作为模块安装。这些将被放置在相对于package.json文件的./node_模块中(实际上比这个稍微复杂一些,所以请检查)

如果您愿意,您可以将node_modules目录移动到应用程序的父目录,因为node的“require”机制可以理解这一点。但是,如果您想使用install/update更新应用程序的依赖项,npm将不会看到重新定位的“node_modules”,而是会创建一个新的dir,再次相对于package.json

要防止出现这种情况,只需从应用程序目录创建一个到重新定位的节点模块的符号链接:

ln -s ../node_modules node_modules

就我而言,我需要这样做

sudo npm install  
我的项目位于/var/www内,因此我还需要设置适当的权限。

只需执行即可

sudo npm i --save

仅此而已

npm安装可能不需要sudo。根据需要执行js文件的用户和安装的依赖项,您可以运行
sudo-u[username]npm安装
。最好在事件发生后递归地安装npm和chown。除非您使用的是
-g
,否则千万不要使用sudo运行npm,即使有更好的方法来处理。谢谢您的回答,但这是为什么?你能解释一下吗?我的意思是,如果我有一个项目,我想或需要保留一个具有root权限的文件夹,并在其中安装不带-g的依赖项,该怎么办?也许有一个很好的理由,但我安装了sudonpm(没有-g)几次,从来没有遇到任何问题。干杯@RredCat我同意做这类事情的正确方法,但过了一段时间我注意到这一讨论正在向Ubuntu迁移,它管理一些权限和文件夹的方式似乎有问题,这迫使用户使用
sudo npm
。同样,只在Ubuntu中使用。尽管它是一个有效的解决方案,但我发现在需要从另一个目录获取模块的情况下,
npm link
更方便(请参阅)