37

当我运行时:

npm install my-app

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

我也试过

npm install -g my-app

但这也行不通。

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

4

8 回答 8

56

npm install在本地或全局安装包:

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

你应该只-g在包是你想用作命令的东西时使用。

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

一般来说,经验法则是:

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

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

不过,这其实是件好事。它将依赖项的文件与您的应用程序分开,并且当您执行某些操作时, Node 会自动搜索该node_modulesrequire文件夹。

于 2012-12-25T16:35:20.680 回答
36

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

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

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

于 2014-09-23T11:50:50.907 回答
23

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

npm i --prefix ./ my-app

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

于 2017-08-13T13:24:51.720 回答
5

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

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

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

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

于 2015-03-07T01:08:19.087 回答
4

您应该package.json在当前目录中有一个。

然后写入npm install <module_name> --save-devor npm install <module_name> --save,它将安装到 node_modules 目录

于 2013-11-15T12:01:19.620 回答
2

使用 Windows 7。我已将 nodejs 安装在与安装时建议的文件夹不同的文件夹 ( c:\develop\nodejs ) 中 ( C:\Program Files\nodejs ) 我对 nodejs 或 npm 完全陌生。我可能不是在谈论 nodejs 或 npm 语言。安装nodejs后。我必须在主 nodejs 文件夹中执行一些这样的命令

npm init

然后我要创建一个本地目录(比如 c:\develop\nodejs\ upload2s3),并创建一个 nodejs 包用作 AWS lambda。为此,我进入本地目录(upload2s3),并尝试

npm install aws-sdk

尽管该命令的行为就像它安装了东西,但这在我的upload2s3文件夹中没有做任何事情,因为它是空的。然后我只是在我的本地文件夹中尝试了这个。

npm init 

这创建了一些package.json,然后我尝试了一些其他文件

npm install aws-sdk

然后它在我的本地文件夹(upload2s3)中创建了一个节点模块文件夹并安装了aws-sdk包。它还更新了 package.json 文件

{
  "name": "uploadtos32",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.448.0"
  }
}
于 2019-05-03T15:58:50.700 回答
0

我也找不到任何合适的解决方案来简单地从 npm 注册表安装独立应用程序。

您可以通过运行下载包的 tarball,通过运行npm pack <package>解压 tarball tar xvf <tarball_name>.tgz,然后通过npm install --production在解压后的目录中运行来安装依赖项。

为了简化整个过程,我创建了一个bash 脚本,可以通过运行以下命令直接从 gist 执行:

bash <(curl -sL https://gist.githubusercontent.com/mmende/2c10dd6161bc75120dbf153098caa48d/raw/installNodeApp.sh) some-package ./package-installation
于 2021-10-22T08:29:17.467 回答
0
pack=$(npm pack <package>) ; tar xzvf ${pack} --strip-components=1 ; rm ${pack} ; npm i
于 2020-04-16T08:49:34.837 回答