Решение 'npm WARN saveError ENOENT: нет такого файла или каталога, откройте ошибку' /Users/<username>/package.json ''

Я новичок, поэтому, пожалуйста, включите ссылки на URL-адреса или объясните терминологию, чтобы я мог понять.

Мне удалось установить 'npm' на Mac OS (10.13.3) через терминал, и я установил некоторые пакеты, такие как SASS, используя его.

Я сейчас пытаюсь установить sass-mq, используя npm. Я думаю, что мне удалось установить его, но я хотел бы получить второе мнение о том, что я мог бы сделать, которое было неполным или неправильным при этом.

Первоначально, следуя инструкциям на странице 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' (это имя пакета, в качестве имени локального пакета (?), Который я устанавливаю на свою локальную машину. Дополнительная информация здесь.

Поэтому я просто попробовал это:

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

Я создаю этот вопрос частично, чтобы другие, как я, искали ответ на похожую проблему, могли найти объяснение, а не просто команды, которые им нужны, чтобы решить их проблему. Я нашел несколько похожих вопросов, но ни один из них не объяснял, что происходит и почему.

Спасибо за чтение, я действительно ценю любую помощь с этим:)

9 ответов

TL;DR: То, как вы это сделали, прекрасно, и вам не нужно беспокоиться об этих предупреждениях.

Подробнее о том, почему существует npm и как он работает, читайте дальше.

npm означает Node Package Manager. Пакеты являются фундаментальной частью экосистемы узлов - они существуют, чтобы позволить вам использовать решения других людей для решения общих проблем.

Однако это может очень запутать, поскольку, поскольку это сообщество с открытым исходным кодом, все они выпускаются разными людьми в разное время. Кроме того, два разных пакета, которые вы используете, могут фактически зависеть от третьего пакета, который вам совершенно неизвестен, и потенциально им могут даже понадобиться разные версии этого пакета.

Как вы уже можете видеть, это может стать очень грязным.

npm помогает вам справляться с этими "зависимостями" таким образом, чтобы им было легче управлять и думать, однако использовать npm не обязательно - вы можете написать приложение для узлов, в котором вы сами организуете все эти различные файлы. Однако это очень запутанно, очень быстро, поэтому по крайней мере в 99% случаев нет реального преимущества. Есть и другие менеджеры пакетов - лично я использую пряжу, но все они пытаются делать подобные вещи, так что выбор в основном является вопросом предпочтений и выходит за рамки этого обсуждения.

Поэтому, когда вы начинаете новый проект, вы вводите npm init и это говорит npm сделать файл в вашей папке с именем package.json, который поможет вам организовать эти зависимости. В package.json будет храниться информация о вашем собственном приложении (которое само по себе является пакетом), а также о том, какие пакеты вы сообщили npm, которые вы собираетесь использовать в качестве зависимостей в своем собственном проекте. Вот почему он задает вам все эти вопросы о названии и описании вашего пакета, так что если вы когда-нибудь опубликуете его, люди будут знать, с кем связаться, что он делает, какая версия и т. Д.

Важно серьезно подумать, если вы действительно собираетесь публиковать свой пакет, что менее вероятно в случае веб-сайта, но очень вероятно, если вы создаете библиотеку. Однако, как вы уже обнаружили, пакеты должны иметь уникальные имена, поэтому вы должны называть свой пакет чем-то личным для вас, чтобы вы не столкнулись с конфликтом имен, как вы делали, когда пытались назвать свои Пакет такой же, как пакет, который вы позже попытаетесь установить.

Итак, давайте создадим наш собственный пакет и установим нашу первую зависимость (помните, что это просто еще один пакет). Я собираюсь выбрать метку времени как зависимость, потому что она красивая и маленькая.

Сначала вы создадите каталог вашего проекта. Это просто пустой новый каталог. Давайте назовем это ts, Внутри каталога ts введите npm init в свой терминал и ответьте на его вопросы (хотя я обычно просто нажимаю вернуться к ним всем), затем загляните в каталог, и вы увидите файл package.json. Откройте файл, и вы увидите всю информацию о вашем пакете. И в настоящее время это все.

Итак, теперь вернемся к командной строке и введите npm install time-stamp, Когда вы закончите думать, снова откройте package.json, и вы увидите метку времени, на которую ссылаются в списке "зависимостей". (Начиная с npm 5 больше нет необходимости использовать --save вариант. npm теперь принимает это как значение по умолчанию. Что такое опция --save для установки npm?)

Вернувшись в каталог, вы также увидите другой файл с именем package-lock.json и каталог с именем node_modules.

Каталог node_modules будет содержать каталог с именем time-stamp, который содержит весь код, который делает работу time-stamp. Возможно, вам не нужно часто заглядывать сюда, но вы можете, и если вы заглянете в каталог отметок времени, то увидите, что у него есть свой собственный 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 и их тут же вытащат из интернета. Это становится гораздо важнее, когда у вас большой проект, потому что все файлы включены в ваши зависимости, но это хорошая привычка - добавлять "node_modules" в ваш.gitignore с первого дня. Но я начинаю отходить от темы, так что, возможно, я должен закончить здесь...

Предполагается, что это только базовое введение, поэтому я оставил его довольно простым, и я не хочу создавать подробное руководство, но если вам нужно уточнить какие-либо из моих замечаний, не стесняйтесь комментируйте и я буду вносить изменения, если смогу!

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 в ответ объясняет, что, как ваш проект может быть опубликован в его собственном пакете НПМ. В этом случае эти предупреждения помогут предупредить, что в вашем 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 понадобится package.json в current 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: если вы находитесь в правильном каталоге, запуститеnpm init и нажмите ENTER ключи, пока он не будет завершен, это создаст package.json в текущем каталоге, теперь запустите npm install

Надеюсь, это кому-то поможет.

Та же проблема возникла у меня при запуске:

npm install -g @ vue / cli

После долгих исследований и экспериментов единственное, что работало вместо этого, было:

npm install -g @ vue / cli @ latest

Бегать npm initон проведет вас через создание файла package.json, после чего вы сможете запустить команду

Вы не можете назвать свой проект равным имени пакета, который вы пытаетесь установить.

Переименуйте ваш проект в пакете json и попробуйте снова или попробуйте npm init снова и используйте другое имя.

Одна из основных проблем может заключаться в том, что вы не находитесь в корневом файле, где вам следует запустить npm install, убедитесь, что вы находитесь либо в папке клиента, либо на стороне сервера, а не в каких-то случайных файлах или родительском файле, у которого нет пакета.json в них

Закройте проект и снова откройте его, это решит проблему

Другие вопросы по тегам