当我运行时:
npm install my-app
该应用程序安装到 node_modules/my-app/...
我也试过
npm install -g my-app
但这也行不通。
如何将模块直接安装到当前目录?
npm install
在本地或全局安装包:
npm
查找在当前目录中调用的现有文件夹node_modules
,并为您安装在该文件夹中的每个包创建一个文件夹。如果它在此处找不到现有node_modules
文件夹,则会查看当前目录的祖先,直到找到一个。如果找不到,它会在当前目录中创建一个。-g
(global) 选项,则该软件包将安装在全局位置。此位置因 Linux 发行版而异,但 /usr/local/lib/node_modules/packagename
只是一个示例。CentOS7 使用/usr/lib/node_modules/packagename
.你应该只-g
在包是你想用作命令的东西时使用。
就像全局变量有点粗俗,但在某些情况下也是必要的一样,全局包很重要,但如果不需要,最好避免使用。
一般来说,经验法则是:
- 如果您正在安装要在程序中使用的东西,请使用
require('whatever')
,然后将其安装在本地项目的根目录下。- 如果您要在shell、命令行或其他地方安装要使用的东西,请全局安装它,以便它的二进制文件最终出现在您的
PATH
环境变量中。
npm 不会将包的文件直接安装到当前目录中。
不过,这其实是件好事。它将依赖项的文件与您的应用程序分开,并且当您执行某些操作时, Node 会自动搜索该node_modules
require
文件夹。
正如@dalu 所说,如果您想拥有本地软件包,则需要一个package.json
文件。
但是要创建package.json
文件,您必须通过运行来初始化 npmnpm init
。
然后您可以使用npm install <module_name> --save[-dev]
.
这是将模块安装到当前目录的方法:
npm i --prefix ./ my-app
正如其他人所说,正确的方法是通过package.json
我认为真正的问题,我和 OP 想要的,是my-app
像安装应用程序一样安装。即安装一个顶级应用程序,我将“使用”作为应用程序而不是“要求”作为模块。
npm安装在我的应用程序目录下一级的事实,纯粹是新 npm 用户的审美反对。
当我开始使用 npm 时(不久前),我通过将git 项目作为安装程序、克隆 git、运行安装脚本来解决它,但现在我已经习惯了,拥有应用程序并不会打扰我在“错误”文件夹中。
只需在正确的位置设置一些或捷径,您的用户就不会注意到.sh
。.bat
您应该package.json
在当前目录中有一个。
然后写入npm install <module_name> --save-dev
or npm install <module_name> --save
,它将安装到 node_modules 目录
使用 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"
}
}
我也找不到任何合适的解决方案来简单地从 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
pack=$(npm pack <package>) ; tar xzvf ${pack} --strip-components=1 ; rm ${pack} ; npm i