【问题标题】:NPM Installs Package Outside Current DirectoryNPM 在当前目录之外安装包
【发布时间】:2013-09-02 05:12:37
【问题描述】:

我尝试使用 npm 从 /home/iwan/my-project 目录中安装 express 包:

npm install express

express@3.3.7 ../node_modules/express
├── methods@0.0.1
├── cookie-signature@1.0.1
├── range-parser@0.0.4
├── fresh@0.2.0
├── buffer-crc32@0.2.1
├── cookie@0.1.0
├── debug@0.7.2
├── send@0.1.4 (mime@1.2.11)
└── commander@1.2.0 (keypress@0.1.0)

奇怪的是 npm 没有在当前目录(/home/iwan/my-project/node_modules/express)安装 express 包,而是在 /home/iwan/node_modules/express。

我错过了什么吗?

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    如果你的当前目录中不存在node_modules 目录,NPM 将在更高的目录中查找它,直到找到它。因此,如果父目录有一个node_modules 目录,NPM 将假定它是安装模块的位置。

    解决此问题的一种快速方法是创建一个空的 node_modules 目录,您希望在其中放置模块。

    【讨论】:

    • 其实我是从 google 来到这里寻求相反的行为,所以我不必总是在安装前去cd ..。解决方案再次 - 正如这个答案所述 - 在父目录中创建 node_modules
    • 不,这不起作用。如果我安装npm install --save redux 它安装在我的命令提示符所在的文件夹中(通过创建node_modules 文件夹),并且没有检查父目录中的node_modules 文件夹。
    • @MuhammadHannan 自写这篇文章以来,NPM 发生了很多变化。这可能是其中之一。
    【解决方案2】:

    我相信使用npm 安装软件包的最佳方法是创建一个package.json 文件。像这样,只要把它作为你的应用程序放在 smae 目录中。示例 package.json 文件可能如下所示:

    {
      "name": "application-name",
      "version": "0.0.1",
      "private": true,
      "scripts": {
        "start": "node app.js"
      },
      "dependencies": {
        "express": "3.3.5",
        "jade": "*",
        "less-middleware": "*",
        "ejs": "*",
        "mongoose": "3.6.*"
      }
    }
    

    查看依赖项列表。只需添加您想要的模块,例如underscore。只需将其添加到依赖项字典中。像这样:

    {
      "name": "application-name",
      "version": "0.0.1",
      "private": true,
      "scripts": {
        "start": "node app.js"
      },
      "dependencies": {
        "express": "3.3.5",
        "jade": "*",
        "less-middleware": "*",
        "ejs": "*",
        "mongoose": "3.6.*",
        "underscore": "*"   <-------------- Added
      }
    }
    

    然后转到您的目录并运行npm install,然后砰!将为您安装所有软件包及其依赖项。它将完成所有工作,这意味着为您创建node_modules 文件夹。这是我的应用程序目录的样子:

    【讨论】:

    • 太棒了!谢谢你。 package.json 让应用看起来更加清晰和信息丰富。
    • @KurniawanJunaidy 如果它对你有用,请投票并接受答案。
    • 请不要使用这个例子。如果你在生产环境中使用 * 作为你的包,你最终会遇到重大更改并花费太多时间来修复它们。如果您正在积极开发并希望确保您的包都保持最新,请使用星号、波浪号或胡萝卜,但不要将它们留在生产环境中。
    • 我第二个 SgtPooki。这是一个危险的先例,最终会导致生产问题。
    【解决方案3】:

    您还可以使用https://docs.npmjs.com/files/package.json 网页中的指南创建一个空白 package.json 文件。然后把它放在你的项目文件夹中并输入npm install

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多