解决 'npm WARN saveError ENOENT: no such file or directory, open '/Users/<username>/package.json'' 错误

Solving the 'npm WARN saveError ENOENT: no such file or directory, open '/Users/<username>/package.json'' error

我是新手,所以请包含指向 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

..在输入我的 'install 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'(这是包的名称,作为本地包的名称(?)我正在本地机器上安装。 Some more info here.

所以我简单地尝试了这个:

**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.

我创建这个问题的部分原因是,其他像我一样寻找类似问题答案的人可以找到解释,而不仅仅是解决问题所需的命令。我发现了一些类似的问题线索,但 none 实际上解释了发生的事情和原因。

感谢阅读,非常感谢您对此提供的帮助:)

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

重命名包 json 中的项目并重试或再次尝试 npm init 并使用另一个名称。

TL;DR:您的做法很好,您不必担心那些警告。

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

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

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

如您所见,这可能会变得非常混乱。

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

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

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

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

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

现在回到命令行并输入 npm install time-stamp。当它完成思考后,再次打开 package.json ,您将看到 'dependencies.' 列表中引用的时间戳(从 npm 5 开始,不再需要使用 --save 选项。npm现在假定这是默认值。What is the --save option for npm install?)

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

的目录

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

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

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

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

安装依赖项后,您将能够requireimport任何地方在您的项目中,而不必担心将其定向到目录结构中的正确路径。只要 require('time-stamp') 就可以了!

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

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

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

我在 运行 时遇到了同样的问题:

npm install -g @vue/cli

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

npm install -g @vue/cli@latest

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

npm WARN saveError ENOENT: no such file or directory, open '/Users/{username}/package.json'

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

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

    cd C://Dev/MySolution/MyWebProject 然后重试。


npm WARN media-queries-nikhil@1.0.0 No description

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

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

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

"description": "filling out this field to avoid warnings",
"repository": "not publishing",
"readme": "not publishing",
"license": "not publishing",

运行 以下:

npm init -y

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

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

问题:

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

原因

npm install 将在您所在的 current directory 中需要 package.json,但缺少。

解决方案

假设有 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 时是否在正确的目录中?

情况一:如果你在错误的目录,cdpackage.json存在的目录,然后运行npm install

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

希望这对某人有所帮助。

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