глобальная установка npm windows приводит к npm ERR! посторонний

121

Я новичок в grunt и npm. Так что я пытаюсь некоторые «кулинарной-пример» на сайте « http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers » , Тебе не стоит сейчас туда заглядывать, но я подумал, что было бы неплохо поделиться сайтом. Пока все хорошо, пока не дойдет до глобальной установки. (Хорошо, мне пришлось разобраться с некоторыми ошибками, но теперь у меня работает npm).

Когда дело доходит до попытки установить что-то глобально, я застреваю.

Что я сделал до сих пор для глобального тестирования, устанавливая какой-то пакет:

  1. Создан тест-каталог grunttest

  2. Внутри этого каталога:

    npm install -g jshint

Вывод я вижу:

 npm http GET https://registry.npmjs.org/jshint
 npm http 304 https://registry.npmjs.org/jshint
 ...
 npm http 304 https://registry.npmjs.org/string_decoder
 C:\Program Files\nodejs\node_modules\npm\jshint -> C:\Program Files\nodejs\node_modules\npm\node_modules\jshinnt
 jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint
 ├── console-browserify@0.1.6
 ├── exit@0.1.2
 ├── underscore@1.4.4
 ├── shelljs@0.1.4
 ├── minimatch@0.2.14 (sigmund@1.0.0, lru-cache@2.5.0)
 ├── cli@0.4.5 (glob@3.2.9)
 └── htmlparser2@3.3.0 (domelementtype@1.1.1, domutils@1.1.6, domhandler@2.1.0, readable-stream@1.0.26-2)

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

Проверка наличия jshint с помощью:

`npm -global list`

Вывод:

npm@1.4.3 C:\Program Files\nodejs\node_modules\npm
├── abbrev@1.0.4
├── ansi@0.2.1
├─...
├──
├── graceful-fs@2.0.2
├── inherits@2.0.1
├── ini@1.1.0
├─┬ init-package-json@0.0.14
│ └── promzard@0.2.1
├─┬ jshint@2.4.4 extraneous
│ ├─┬ cli@0.4.5
│ │ └─┬ glob@3.2.9
│ │   └── inherits@2.0.1
│ ├── console-browserify@0.1.6
│ ├── exit@0.1.2
│ ├─┬ htmlparser2@3.3.0
│ │ ├── domelementtype@1.1.1
│ │ ├── domhandler@2.1.0
│ │ ├── domutils@1.1.6
│ │ └─┬ readable-stream@1.0.26-2
│ │   └─... ├── text-table@0.2.0
├── uid-number@0.0.3
└── which@1.0.5

**npm ERR! extraneous: jshint@2.4.4 C:\Program Files\nodejs\node_modules\npm\node_modules\jshint npm**

Вопросы:

  1. Почему я получаю npm ERR! посторонний ...?
  2. Что это означает?
  3. Как я могу решить эту проблему?

Информация:

Я нахожусь на Windows-машине Windows 7, используя cygwin в качестве оболочки. попытка использовать только jshint ( jshint someTestfile.js), конечно, не работает.

Заранее спасибо, Меру

Мера
источник

Ответы:

208

npm ERR! extraneousозначает, что пакет установлен, но не указан в вашем проекте package.json.

Поскольку вы перечисляете пакеты, которые были установлены глобально, это даст вам множество посторонних ошибок, которые можно просто проигнорировать, потому что большинство вещей, установленных глобально, не будет в вашем проекте package.json.

Кайл Робинсон Янг
источник
1
Здравствуй! Спасибо за ответ. Означает ли это также, что я действительно должен иметь возможность выполнить "jshint", правильно?
Meru
Верный. Запуск jshint myfile.jsдолжен запускать jshint myfile.js.
Кайл Робинсон Янг
1
Ах я вижу. С Grunt все проходит через задачи. Вы должны загрузить и настроить grunt-contrib-jshintзадачу в своем Gruntfile.js. Единственное, что вы устанавливаете глобально, - это то, npm i grunt-cli -gчто дает вам доступ к запуску gruntкоманды для запуска Gruntfile.js. См. Это руководство для получения дополнительной информации: gruntjs.com/getting-started
Кайл Робинсон Янг
8
Если у вас есть сторонние библиотеки, сохраненные локально (не глобально), вы можете запустить npm pruneих, чтобы избавиться от них.
krx
2
@KyleRobinsonYoung: Как насчет того, чтобы упомянуть об этом в ответе. Вы можете удалить все неиспользуемые пакеты с помощьюnpm prune --your-env
geek_guy
21

1 и 2: это означает, что у вас нет jshint, указанного в файле package.json вашего проекта, но он установлен глобально. Так что это не большая проблема.

3: Чтобы избежать этой посторонней ошибки, вы можете запустить или повторно запустить установку с опцией --save. Это автоматически обновит ваш файл package.json:

npm install -g jshint --save

Или вам нужно вручную обновить файл package.json с помощью "dependencies": {...}

rebe100x
источник
в ma случаях работает только с локальным без глобального дубликата
BG BRUNO
2
--saveне работает вместе с -g. В глобальном списке пакетов нет package.json.
Guido Bouman
5

Я решил эту проблему, выполнив npm updateоперацию в папке родительского пакета, которая удалила некоторые из посторонних пакетов из списка, а затем удалила npm uninstall <package>оставшиеся.

Кажется, сработало, поскольку после этого я не получаю ошибок.

metakermit
источник
3

Я решил это, объединив все ответы. Сначала я установил пакет глобально.

npm install -g packagename --save

Поскольку npm также установил этот пакет глобально, но не добавил его в мой локальный файл package.json, мне пришлось что-то с этим делать.

Я выбираю решение удалить локальный, а затем установить его глобально.

npm uninstall packagename
npm install -g packagename

Таким образом, у меня больше не будет предупреждений и я не испорчу файл package.json.

маркер
источник
Плюс 100. Пришлось удалить локально и установить глобально.
Коллин Питерс
1

В моем случае я видел эту ошибку npm! постороннее сообщение в моем терминале cygwin, когда я сделал npm ls. Я подумал, что это какая-то глобально испорченная установка после долгой работы. Здесь я узнаю следующие наблюдения:

  • npm ls дает разные результаты в зависимости от того, где находится ваша текущая папка.
  • «npm ls» пытается обнаружить наличие папки «node_modules» в текущем местоположении папки и вывести это содержимое. НЕ глобальные!
  • Кроме того, если в текущей папке, содержащей «node_modules», также есть файл package.json, содержащий меньшее количество модулей, перечисленных здесь, то отображается ошибка.

Я "rm package.json" и "npm ls" больше не показывает сообщение об ошибке. Поэтому я говорю, что всегда проверяйте текущее местоположение на наличие папки 'node_modules' и файла package.json, потому что они сначала имеют приоритет при проверке, и если они отсутствуют, проверка продолжается в родительской папке и так далее, и если вы много возились с фрагментами кода, то, возможно, вы разбросали много-много папок node_modules и файла package.json. На самом деле здесь ничего не повреждено, в отличие от того опыта, который мы имели при разработке J2EE Java / eclipse IDE или в те дни, когда нам приходилось использовать regedit для изменения настроек в Windows.

truthadjustr
источник
1

В моем случае это произошло потому, что имя пакета в его package.jsonфайле не совпадает с именем зависимости, указанным в package.jsonзависимом модуле. Моя ошибка, так как это новый модуль, который я создал, но его трудно обнаружить, поскольку npm не даст никаких подсказок.

Это произошло при использовании dependencies: { "my-module": "file:local-modules/mymodule" }синтаксиса с опечаткой в ​​имени "my-module".

youen
источник
0

Это связано с тем, что вашего пакета нет в вашем package.json. Если вы добавите его, проблема будет решена, посмотрите на изображение ниже:

введите описание изображения здесь

Нарендра Сагадеван
источник