npm windows глобально встановлює результати npm ERR! стороннє


121

Я новачок у грунті та нмм. Тому я пробую певний "кулінарний приклад" на сайті " 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", правильно?
Меру

Правильно. Біг jshint myfile.jsповинен запускати jshint далі myfile.js.
Кайл Робінсон Янг

1
А, бачу. З Грунтом все проходить через завдання. Ви б завантажили та налаштували 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: Це означає, що у файлі package.json вашого проекту не вказано jshint, але він встановлений у всьому світі. Тож це не велика проблема.

3: Щоб уникнути цієї сторонньої помилки, ви можете запустити або запустити інсталяцію за допомогою параметра --save. Це автоматично оновить файл package.json:

npm install -g jshint --save

Або потрібно оновити файл package.json вручну за допомогою "dependencies": {...}


у ма випадках працює лише з локальними без глобального дубліката
BG BRUNO

2
--saveне працює разом із -g. У глобальному списку пакунків немає пакета package.json.
Гвідо Буман

5

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

Здається, це спрацювало, тому що я не отримую помилок після цього.


3

Я вирішив це, поєднавши всі відповіді. Спочатку я встановив пакет у всьому світі.

npm install -g packagename --save

Оскільки npm встановив цей пакунок також у всьому світі, але не додав його до свого локального файлу package.json, мені довелося щось з цим зробити.

Я вибираю рішення, щоб видалити локальний, а потім встановити його глобально.

npm uninstall packagename
npm install -g packagename

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


Плюс 100. Мені довелося видалити локально та встановити глобально.
Коллін Пітерс

1

Я мій випадок, я побачив цю 'npm ERR! сторонне повідомлення в моєму терміналі cygwin, коли я робив 'npm ls'. Я подумав, що це якась глобально пошкоджена установка після того, як було багато роздумів. Тут я дізнаюся такі спостереження:

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

Я 'rm package.json' і 'npm ls' більше не показує повідомлення про помилку. Тому я кажу, що завжди перевіряйте поточне розташування на наявність папки "node_modules" та файлу package.json, оскільки вони є пріоритетними спочатку під час перевірки, а якщо таких немає, перевірка продовжується до батьківської папки тощо. і якщо ви багато заробляли фрагменти коду, ви, можливо, розсипалися по папках безліч і безлічі папок node_modules та file.json. Тут насправді нічого не пошкоджено, на відміну від досвіду, який ми маємо при розробці J2EE Java / eclipse IDE або в дні, коли нам потрібно використовувати regedit для зміни налаштувань у Windows.


1

У моєму випадку це було тому, що ім'я пакету у його package.jsonфайлі не було таким самим, як ім'я depency, вказане у відповідному package.jsonмодулі. Моя помилка, оскільки це новий модуль, який я створив, але його важко помітити, оскільки npm не дасть жодної підказки.

Це сталося при використанні dependencies: { "my-module": "file:local-modules/mymodule" }синтаксису, з помилкою помилки в назві "my-module".


0

Це пов’язано з тим, що ваш пакет не знаходиться у вашому пакеті.json. Якщо ви додасте його, проблема буде вирішена, перегляньте зображення нижче:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.