作者:完美美容店 | 来源:互联网 | 2022-12-13 14:55
如何解决《解决'npmWARNsaveErrorENOENT:没有这样的文件或目录,打开'/Users/<username>/package.json''错误》经验,为你挑选了1个好方法。
我是新手,所以请包含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//package.json'
npm WARN enoent ENOENT: no such file or directory, open '/Users//package.json'
npm WARN No description
npm WARN No repository field.
npm WARN No README data
npm WARN 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'(这是包的名称,作为我在本地机器上安装的本地包的名称(?).这里有更多信息.
所以我只是尝试了这个:
**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.
我正在创建这个问题,所以像我这样寻找类似问题答案的其他人可以找到解释,而不仅仅是他们需要解决问题的命令.我发现了一些类似的问题,但实际上并没有解释发生了什么以及为什么.
感谢阅读,我非常感谢任何帮助:)
1> Abulafia..:
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目录将包含一个名为时间戳的目录,其中包含使时间戳生效的所有代码。您可能不需要经常查看此处,但是可以查看,如果您查看时间戳目录,您会发现它具有自己的package.json!打开它,看看,它本身具有安装所需的所有信息。你会注意到,它并没有任何相关性,但如果这么做,他们将被安装在您的node_modules与所有的依赖,以及...和他们的依赖关系......和他们的...如果你想看到实际效果,请尝试安装测试框架。再次,只是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和锁文件的组合完美地表示了node_modules中所有文件,这意味着您不需要将它们包含在git(或其他存储库)中。您可以将存储库下拉至新服务器,只需键入npm install
,然后将它们从Internet拖到那里。由于您的依赖项涉及所有文件,因此在您拥有大型项目时,这变得尤为重要,但是从第一天开始,将'node_modules'添加到您的.gitignore是一个好习惯。但是我开始摆脱话题,所以也许我应该在这里结束...
这仅是一个基本介绍,因此我将其保持相当简单,并且我不想创建深入的教程,但是如果您需要澄清我提出的任何观点,请随时发表评论,如果可以的话,我会进行修改!
迄今为止最好的101。你应该写一本书!