59

我是新手,所以请包含指向 URL 的链接或解释术语,以便我理解。

我已经设法通过终端在 Mac OS (10.13.3) 上安装“npm”,并使用它安装了一些包,如 SASS。

我现在正在尝试使用 npm安装sass-mq 。我想我已经设法安装了它,但我想对我可能做的不完整或错误的事情提出第二意见。

最初,按照 sass-mq Github 页面上的说明,我尝试使用:

npm install sass-mq --save

这给了我这个错误:

npm WARN saveError ENOENT: no such file or directory, open '/Users/<username>/package.json'
    npm WARN enoent ENOENT: no such file or directory, open '/Users/<username>/package.json'
    npm WARN <username> No description
    npm WARN <username> No repository field.
    npm WARN <username> No README data
    npm WARN <username> No license field.

    + sass-mq@5.0.0
    updated 1 package and audited 1 package in 1.67s
    found 0 vulnerabilities

环顾四周,我意识到我注定要使用

npm init

..在输入我的“安装 sass-mq --save”命令之前。

酷,做到了。下一个错误是这样的:

package name: (nikhil) sass-mq
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/nikhil/package.json:

{
  "name": "sass-mq",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "sass-mq": "^5.0.0"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes) 
darwin:~ nikhil$ npm install sass-mq --save
npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "sass-mq" under a package
**npm ERR! also called "sass-mq". Did you name your project the same
npm ERR! as the dependency you're installing?**

我认为这是说我不能使用“sass-mq”(这是包的名称,作为本地包的名称(?)我正在本地机器上安装。更多信息在这里。

所以我只是尝试了这个:

**package name: (sass-mq) media-queries-nikhil**
version: (1.0.0) 
description: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/nikhil/package.json:

它似乎工作正常。

我的问题是:这是我应该这样做的正确方式吗?你通常是怎么做的?

另外,我收到这些警告 - 可以忽略它们吗?

npm WARN media-queries-nikhil@1.0.0 No description
npm WARN media-queries-nikhil@1.0.0 No repository field.

我正在部分创建这个问题,以便像我这样寻找类似问题答案的其他人可以找到解释,而不仅仅是他们需要解决问题的命令。我发现了一些类似的问题线程,但没有一个能够真正解释发生了什么以及为什么。

感谢您的阅读,我非常感谢您对此的任何帮助 :)

4

8 回答 8

53

TL;DR:你做这件事的方式很好,你不必担心那些警告。

要更深入地了解 npm 存在的原因及其工作原理,请继续阅读。

npm 代表节点包管理器。包是节点生态系统的基本组成部分——它们的存在是为了让您可以使用其他人的解决方案来解决常见问题。

然而,这可能会让人非常困惑,因为这是一个开源社区,它们都是由不同的人在不同的时间发布的。此外,您使用的两个不同的包实际上可能依赖于您完全不知道的第三个包,并且可能他们甚至可能需要该包的不同版本。

正如您已经看到的,这有可能变得非常混乱。

npm 可以帮助您以更易于管理和思考的方式处理这些“依赖项”,但是使用 npm 并不是必需的 - 您可以编写一个节点应用程序,您可以自己组织所有这些不同的文件。然而,这很快就会变得非常混乱,因此至少在 99% 的情况下没有真正的优势。还有其他包管理器——我个人使用 yarn,但他们都在尝试做类似的事情,所以这个选择主要是一个偏好问题,超出了本次讨论的范围。

因此,当您开始一个新项目时,您输入npm init并告诉 npm 在您的文件夹中创建一个名为 package.json 的文件,该文件将帮助您组织这些依赖项。package.json 将保存有关您自己的应用程序(它本身就是一个包)的信息,以及您告诉 npm 您将在自己的项目中用作依赖项的包的信息。这就是为什么它会询问你所有关于你的包名称和描述的问题,这样如果你发布它,人们就会知道与谁联系、它做什么、它是什么版本等。

如果您真的打算发布您的包,那么认真考虑这一点很重要,这在网站的情况下不太可能,但如果您正在制作一个库,则很有可能。但是,正如您已经发现的那样,包意味着具有唯一的名称,这就是为什么您应该将您的包命名为您个人的东西,这样您就不会像尝试命名您的包时那样遇到命名冲突包与您稍后要尝试安装的包相同。

所以让我们创建自己的包,并安装我们的第一个依赖项(记住,它只是另一个包)。我将选择时间戳作为依赖项,因为它既好又小。

首先,您将创建您的项目目录。这只是一个空的新目录。让我们称之为ts。从 ts 目录中,输入npm init终端并回答它的问题(尽管我通常只按回车键)然后查看目录内部,您将看到 package.json 文件。打开文件,你会看到你所有包信息。目前就是这样。

所以现在回到命令行并输入npm install time-stamp. 完成思考后,再次打开 package.json,您将看到“依赖项”列表中引用的时间戳。(从 npm 5 开始,不再需要使用该--save选项。npm 现在假定这是默认设置。npm install 的 --save 选项是什么?

回到目录中,您还将看到另一个名为 package-lock.json 的文件和一个名为 node_modules 的目录。

node_modules 目录将包含一个名为 time-stamp 的目录,其中包含使时间戳工作的所有代码。你可能不需要经常查看这里,但是你可以,如果你查看时间戳目录,你会看到它有自己的 package.json!打开它看看,里面有它自己安装所需的所有信息。您会注意到它没有任何依赖项,但如果有,它们将与所有依赖项一起安装在您的 node_modules 中......以及它们的依赖项......以及他们的......如果你想看到这个,尝试安装测试框架'jest. 再次,只是npm install jest

希望整个事情开始变得有点意义,现在......

锁定文件稍微复杂一些。它的作用是确保当您将项目部署到新系统时,您使用完全相同的一组依赖项。它需要这样做,因为 npm 组织事物的方式可能依赖于最新的发布版本等,如果你尝试部署你的应用程序并且它没有工作,因为你的依赖关系表现不同,这将是非常烦人的来自您的开发环境!

说了这么多,现阶段基本上可以无视了!它是 npm 的重要组成部分,但除非你真的知道自己在做什么,否则不应该直接编辑它。

一旦安装了依赖项,您就可以require在项目中的任何位置import安装它,而不必担心将其定向到目录结构中的正确路径。只是,它会工作得很好!require('time-stamp')

最后,为了做到这一点做得很好,值得一提的是全局安装。使用该-g选项 - 也就是说npm install time-stamp -g- 意味着依赖项将安装在您计算机某处的中央 node_modules 目录中,而不是您项目的 node_modules 文件夹中。但是,您仍然需要将它链接到您的项目(以便它最终成为 package.json 中的依赖项),您可以通过键入npm link time-stamp. 就我个人而言,我喜欢我的所有模块都在我的项目中,但这又取决于您的用例和个人偏好。

这一切意味着你的 package.json 和 lock 文件的组合是你 node_modules 中所有文件的完美表示,这意味着你不需要将它们放在你的 git(或其他存储库)中。你可以将你的存储库拉到一个新的服务器上,你所要做的就是输入npm install,然后它们就会从互联网上被拖下来。当您有一个大型项目时,这变得更加重要,因为您的依赖项涉及所有文件,但是从第一天开始将“node_modules”添加到您的 .gitignore 是一个好习惯。但我开始跑题了,所以也许我应该在这里结束......

这只是一个基本的介绍,所以我保持相当简单,我不想创建一个深入的教程,但如果你需要澄清我提出的任何观点,请随时发表评论,如果可以的话,我会进行编辑!

于 2019-01-30T18:57:12.653 回答
34

npm WARN saveError ENOENT:没有这样的文件或目录,打开 '/Users/{username}/package.json'

  • 你没有 package.json > 使用npm init

  • 您在错误的目录中 >cd到您的 package.json 所在的文件夹,如下所示:

    cd C://Dev/MySolution/MyWebProject 然后再试一次。


npm WARN media-queries-nikhil@1.0.0 无描述

npm WARN media-queries-nikhil@1.0.0 没有存储库字段。

Abulifa 的回答解释说,您的项目可以作为它自己的 npm 包发布......在这种情况下,这些警告将有助于警告您的 package.json 缺少某些字段。

如果你知道你永远不会作为 npm 包发布,并且想要隐藏这些警告,请将其添加到你的 package.json 中:

"description": "filling out this field to avoid warnings",
"repository": "not publishing",
"readme": "not publishing",
"license": "not publishing",
于 2019-11-01T16:54:56.203 回答
16

运行以下命令:

npm init -y

这将创建package.json文件,您可以稍后使用适当的信息对其进行编辑。

参考:https ://www.digitalocean.com/community/questions/npm-warn-saveerror-enoent-package-json-not-found

于 2019-11-25T09:27:52.850 回答
10

问题:

npm install失败并出现以下错误
npm WARN saveError ENOENT: no such file or directory, open '.../package.json'' error

原因

npm install将需要package.jsoncurrent directory你所在的地方,这是缺失的。

解决方案

假设有2个目录:

C:\dir1_p\       <--------- package.json exists
C:\dir2\         <--------- package.json does not exist

cd C:\dir1_p\
npm intall      <---------- PASS, since package.json is present

cd C:\dir2\
npm intall      <---------- ERROR, since package.json is Not present  (this was my problem)

那么,当您这样做时,您是否在正确的目录中npm install

案例1:如果你在错误的目录中,cd到一个package.json存在的目录,然后运行npm install

案例2:如果您在正确的目录中并且想要create a new package.json,然后运行npm initENTER按键直到完成,这将package.json在当前目录中创建,现在运行npm install

希望这可以帮助某人。

于 2020-01-17T04:15:19.133 回答
3

您不能将您的项目命名为与您尝试安装的包名称相同的名称。

在包 json 中重命名您的项目并重试或再次尝试npm init并使用其他名称。

于 2019-01-30T17:49:32.120 回答
3

我在运行时也出现了同样的问题:

npm install -g @vue/cli

经过大量研究和实验,唯一有效的是:

npm install -g @vue/cli@latest
于 2019-02-21T20:04:00.457 回答
0

主要问题之一可能是您不在根文件中,如果您应该运行 npm install,请确保您在客户端文件夹或服务器端,而不是在一些随机文件或没有包的父文件中。 json在他们

于 2021-08-12T05:44:59.953 回答
-5

关闭项目并重新打开它,这将解决问题

于 2019-10-01T20:32:56.370 回答