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


202

我有一个Web应用程序:fooapp。我有package.json根。我想将所有依赖项安装在特定的中node_modules directory。我该怎么做呢?

我想要的是

可以说我有两个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目录中。

我了解这对于安装软件包很有意义。但是我不在require()其他地方使用Web应用程序,而是直接运行它。我正在寻找一种将依赖项安装到特定的node_modules目录中的简单方法。

Answers:


389

运行:

npm install

从您的应用程序目录中(即其中的package.json所在地)将安装依赖你的应用程序,而不是将它安装为一个模块,如本文所述。这些将放置在相对于package.json文件的./node_modules中(实际上比这稍微复杂一些,因此请在此处查看npm文档)。

您可以根据需要随意将node_modules目录移动到应用程序的父目录,因为node的'require'机制可以理解这一点。但是,如果要通过安装/更新来更新应用程序的依赖关系,npm将不会看到已重定位的“ node_modules”,而是将创建一个新的目录,同样相对于package.json。

为了防止这种情况,只需从您的应用程序目录创建一个指向重新定位的node_modules的符号链接:

ln -s ../node_modules node_modules

太棒了!我会尝试一下,并将此答案标记为可接受(如果可行)。
Daniel Beardsley

9
尽管这是一个工作的解决方案,我发现npm link是在你需要抓住模块从另一个目录中这种情况更方便(见stackoverflow.com/a/14387210/820520
melekes

14

就我而言,我需要做

sudo npm install  

我的项目在/ var / www内部,因此我还需要设置适当的权限。


15
npm安装可能不需要sudo。
Allen Koo 2013年

2
根据需要执行js文件的用户和安装的依赖项,可以运行sudo -u [username] npm install。最好只npm installchown事后的node_modules目录递归。
TheLonelyGhost

5
除非您正在使用-g- 否则永远不要使用sudo运行npm,即使那样,还有更好的方法来处理它。
tkone 2015年

1
谢谢您的回答,但是为什么呢?你可以解释吗?我的意思是,如果我有一个项目,我希望或需要在其中保留一个具有root权限的文件夹并在那里安装不带-g的依赖项,那该怎么办?也许有一个很好的理由,但是我做了sudo npm install(不带-g)几次,却没有遇到任何麻烦。干杯!
aesede 2015年

1
@RredCat我同意做这种事情的正确方法,但是过了一会儿我注意到这个讨论正在向Ubuntu迁移,它似乎在管理一些权限和文件夹的方式上存在问题,这迫使用户使用sudo npm。同样,仅在Ubuntu中。
aesede 2015年

0

只需执行

sudo npm i --save

就这样

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.