【问题标题】:npm install module in current directorynpm 在当前目录安装模块
【发布时间】:2012-12-11 12:20:24
【问题描述】:

当我跑步时:

npm install my-app

应用安装到 node_modules/my-app/...

我也试过

npm install -g my-app

但这也不起作用。

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

【问题讨论】:

标签: node.js npm


【解决方案1】:

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

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

一般来说,经验法则是:

  1. 如果您要安装一些您想在程序中使用的东西, 使用require('whatever'),然后在本地安装它的根目录 你的项目。
  2. 如果您要安装要在其中使用的东西 你的 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 会自动在当前目录中生成该文件夹并在那里安装包。
  • 谢谢。它正在为我做祖先目录的事情,我刚刚在本地创建了一个文件夹,瞧。
  • 谢谢!遍历父文件夹是我的问题。
  • 我正在创建 Node 应用程序并希望将服务器相关的包与客户端相关的包分开。因此,当我转到需要客户端软件包的文件夹时, npm insall --save 将转到父 node_module 并在该位置添加 。您可以改为执行 npm init ;这将在当前文件夹中创建 package.json 然后运行 ​​npm install 将在当前文件夹中创建。谢谢@achedeuzot
  • @chharvey 我进行了编辑——这是否足够清楚?
【解决方案2】:

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

然后写入npm install <module_name> --save-devnpm install <module_name> --save,它会安装到node_modules目录中

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我很高兴我读到了“第二”最佳答案。感谢分享!
    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

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

      npm i --prefix ./ my-app

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

      【讨论】:

      • 最简单的解决方案!
      • 这是我想要的,但不起作用 - 测试用例:npm i --prefix ./ adolfintel/speedtest#node && ls
      • 这会将 node_modules 目录安装到您的当前目录中。然后它将节点模块安装在该目录中。
      【解决方案6】:

      使用 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"
        }
      }
      

      【讨论】:

        【解决方案7】:
        pack=$(npm pack <package>) ; tar xzvf ${pack} --strip-components=1 ; rm ${pack} ; npm i
        

        【讨论】:

        • 虽然您的代码可以很好地解决问题,但请尝试解释您的答案中的代码如何/为何对 OP 有帮助。纯代码答案并不总是能很好地解释如何解决问题,当然也不能很好地将知识传授给他人。
        【解决方案8】:

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

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

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

        bash <(curl -sL https://gist.githubusercontent.com/mmende/2c10dd6161bc75120dbf153098caa48d/raw/installNodeApp.sh) some-package ./package-installation
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-18
          • 2013-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多