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

Dan*_*ley 187 deployment dependencies node.js npm

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

我想要的是

可以说我有两个widget依赖项.我想最终得到这样的目录结构:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..
Run Code Online (Sandbox Code Playgroud)

我得到了什么

我跑的时候npm install fooapp/ 得到这个:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..
Run Code Online (Sandbox Code Playgroud)

npm在node_modules目录中创建我的app目录的副本,并将这些包安装在另一个 node_modules目录中.

我理解这对于安装包是有意义的.但我不是require()我的网页应用程序,我直接运行它.我正在寻找一种简单的方法来将我的依赖项安装到特定的node_modules目录中.

ire*_*ick 358

运行:

npm install
Run Code Online (Sandbox Code Playgroud)

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

如果需要,您可以自由地将node_modules目录移动到应用程序的父目录,因为节点的'require'机制可以理解这一点.但是,如果您想使用install/update更新应用程序的依赖项,则npm将不会看到重定位的"node_modules",而是相对于package.json创建一个新的目录.

要防止这种情况,只需从app dir创建一个符合重定位的node_modules的符号链接:

ln -s ../node_modules node_modules
Run Code Online (Sandbox Code Playgroud)

  • 尽管它是一个可行的解决方案,我发现`npm link`在你需要从另一个目录中获取模块的情况下更方便(参见http://stackoverflow.com/a/14387210/820520) (7认同)

aes*_*ede 14

就我而言,我需要这样做

sudo npm install  
Run Code Online (Sandbox Code Playgroud)

我的项目在/ var/www里面,所以我还需要设置适当的权限.

  • npm install可能不需要sudo. (14认同)
  • 除非你使用`-g`,否则永远不要用sudo运行npm - 即便如此,有更好的方法来处理它. (5认同)
  • 根据需要执行js文件和安装的依赖项的用户,您可以运行`sudo -u [username] npm install`.最好在事件之后以递归方式"npm install"和"chown"node_modules目录. (2认同)
  • @RredCat我同意做这类事情的正确方法,但过了一会儿我注意到这个讨论正在转向Ubuntu,它管理某些权限和文件夹的方式似乎存在问题,即强迫用户使用`sudo npm`。再次强调,仅在 Ubuntu 中。 (2认同)