npm安装模块在当前目录中

İki*_*are 25 node.js npm

当我跑:

npm install my-app
Run Code Online (Sandbox Code Playgroud)

该应用程序安装在node_modules/my-app/...

我也试过了

npm install -g my-app
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.

如何将模块直接安装到当前目录中?

jos*_*736 39

npm install本地或全局安装软件包:

  • 本地:npm查找node_modules当前目录中调用的现有文件夹,并为您在该文件夹中安装的每个包创建一个文件夹.如果它node_modules在这里找不到现有的文件夹,那么它会查看当前目录的祖先,直到找到它为止.如果找不到,则在当前目录中创建一个.
  • 全局:如果使用-g(全局)选项,则程序包将安装在全局位置.这个位置因Linux发行版而异,但 /usr/local/lib/node_modules/packagename只是一个例子.CentOS7使用/usr/lib/node_modules/packagename.

只有-g当包装是您想要用作命令的东西时才应该使用.

就像全局变量有点粗略,但在某些情况下也是必要的,全局包很重要,但如果不需要,最好避免使用.

一般来说,经验法则是:

  1. 如果您正在安装要在程序中使用的内容require('whatever'),请使用,然后在项目的根目录下在本地安装.
  2. 如果您要在shell中安装要在shell中使用的东西,请在命令行上安装它,全局安装它,以便它的二进制文件最终在您的PATH环境变量中.

npm不会将软件包的文件直接安装到当前目录中.

然而,这实际上是一件好事.它使依赖文件从您的应用程序分离,节点自动搜索node_modules,当文件夹中require的东西.

  • 你的第一颗子弹只是略微正确.如果当前目录中没有`./ node_modules /`文件夹,则npm将搜索祖先目录,直到找到其中包含`node_modules /`的目录.如果找到一个,让我们说在祖父目录中,那么`npm install packagename`将在`../../ node_modules /`中安装`packagename`.但是,如果它搜索文件树直到它到达root并且仍然没有找到任何`node_modules /`文件夹,那么你是正确的,npm将自动在当前目录中生成该文件夹并在那里安装包. (28认同)
  • 谢谢.它正在为我做祖先目录,我只是在本地创建了一个文件夹而且瞧. (2认同)
  • @chharvey我做了一个编辑 - 这是否足以澄清它? (2认同)

ach*_*zot 28

正如@dalu所说,如果你想拥有本地软件包,你需要一个package.json文件.

但要创建package.json文件,您必须通过运行初始化npmnpm init.

然后你可以使用npm install <module_name> --save[-dev].

  • 我很高兴我阅读了“第二个”最佳答案。感谢分享! (3认同)

joh*_*cek 15

这是您可以将模块安装到当前目录的方法:

npm i --prefix ./ my-app

正如其他人所说,正确的方法是通过配置项目 package.json


小智 5

你应该package.json在你当前的目录中有一个.

然后写npm install <module_name> --save-dev或者npm install <module_name> --save它将安装到node_modules目录


小智 5

我认为真正的问题,我和 OP 想要的是安装我的应用程序,就像安装应用程序一样,即安装顶级应用程序,我将“使用”作为应用程序而不是“需要” "作为一个模块。

npm 安装在我的应用程序目录下一层的事实,纯粹是新 npm 用户的审美反对。

当我开始使用 npm 时(不久前),我通过将 git 项目作为安装程序来解决它,克隆 git,运行安装脚本,但现在我已经习惯了它并没有打扰我拥有该应用程序在“错误”文件夹中。

只需在正确的位置设置一些 .sh、.bat 或快捷方式,您的用户就不会注意到。