【发布时间】:2012-12-11 12:20:24
【问题描述】:
当我跑步时:
npm install my-app
应用安装到 node_modules/my-app/...
我也试过
npm install -g my-app
但这也不起作用。
如何将模块直接安装到当前目录?
【问题讨论】:
-
已提出功能请求:github.com/npm/cli/issues/1578
当我跑步时:
npm install my-app
应用安装到 node_modules/my-app/...
我也试过
npm install -g my-app
但这也不起作用。
如何将模块直接安装到当前目录?
【问题讨论】:
npm install 安装包或者locally or globally:
npm 在当前目录中查找名为node_modules 的现有文件夹,并为您在该文件夹中安装的每个软件包创建一个文件夹。如果它在此处找不到现有的node_modules 文件夹,则会查看当前目录的祖先,直到找到一个。如果找不到,则会在当前目录中创建一个。-g(全局)选项,则软件包安装在全局位置。此位置因 Linux 发行版而异,但 /usr/local/lib/node_modules/packagename 是一个示例。 CentOS7 使用/usr/lib/node_modules/packagename。只有当包是你想用作命令的东西时,你才应该使用-g。
就像全局变量有点粗俗,但也是必要的 在某些情况下,全局包很重要,但如果不是最好避免 需要。
一般来说,经验法则是:
- 如果您要安装一些您想在程序中使用的东西, 使用
require('whatever'),然后在本地安装它的根目录 你的项目。- 如果您要安装要在其中使用的东西 你的 shell,在命令行或其他地方,全局安装它,所以 它的二进制文件最终会出现在您的
PATH环境变量中。
npm 不会将包的文件直接安装到当前目录中。
不过,这其实是件好事。它将依赖项的文件与您的应用分开,Node automatically searches the node_modules folder when you require something。
【讨论】:
./node_modules/ 文件夹,则 npm 将搜索祖先目录,直到找到其中包含 node_modules/ 的目录。如果找到了,假设在祖父目录中,那么npm install packagename 将在../../node_modules/ 中安装packagename。但是,如果它向上搜索文件树直到它到达根目录并且仍然没有找到任何node_modules/ 文件夹,那么你是对的,npm 会自动在当前目录中生成该文件夹并在那里安装包。
您的当前目录中应该有一个package.json。
然后写入npm install <module_name> --save-dev或npm install <module_name> --save,它会安装到node_modules目录中
【讨论】:
正如@dalu 所说,如果你想拥有本地包,你需要一个package.json 文件。
但要创建 package.json 文件,您必须通过运行 npm init 来初始化 npm。
然后您可以使用npm install <module_name> --save[-dev]。
【讨论】:
我认为我和 OP 想要的真正问题是安装 my-app 就像安装应用程序一样。 即安装一个顶级应用程序,我将“使用”作为应用程序而不是“要求”作为模块。
npm 安装比我的应用程序低一级的事实 目录,纯粹是新 npm 用户的审美反对。
当我开始使用 npm 时(不久前),我通过将 git 项目 作为安装程序、克隆 git、运行安装脚本来解决它,但现在我已经习惯了并且不再将应用程序放在“错误”文件夹中。
只需在正确的位置设置一些.sh、.bat 或捷径
并且您的用户不会注意到。
【讨论】:
这是您可以将模块安装到当前目录的方法:
npm i --prefix ./ my-app
正如其他人所说,正确的方法是通过package.json配置您的项目
【讨论】:
npm i --prefix ./ adolfintel/speedtest#node && ls
使用 Windows 7。 我已将 nodejs 安装在与安装时建议的文件夹 (C:\Program Files\nodejs) 不同的文件夹 (c:\develop\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) 中创建了一个 node-modules 文件夹并安装了 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"
}
}
【讨论】:
pack=$(npm pack <package>) ; tar xzvf ${pack} --strip-components=1 ; rm ${pack} ; npm i
【讨论】:
我也找不到任何合适的解决方案来简单地从 npm 注册表安装独立应用程序。
您可以通过运行npm pack <package> 下载包的tarball,通过运行tar xvf <tarball_name>.tgz 解压tarball,然后通过在解压目录中运行npm install --production 安装依赖项。
为了简化整个过程,我创建了一个bash script,可以通过运行直接从 gist 执行:
bash <(curl -sL https://gist.githubusercontent.com/mmende/2c10dd6161bc75120dbf153098caa48d/raw/installNodeApp.sh) some-package ./package-installation
【讨论】: