npm windows cài đặt trên toàn cầu cho kết quả là npm ERR! không liên quan


121

Tôi mới quen với càu nhàu và npm. Vì vậy, tôi đang thử một số "sách dạy nấu ăn" trên trang web ' http://tech.pro/tutorial/1190/package-managers-an-introductory-guide-for-the-uninitiated-front-end-developer#front_end_developers ' . Bạn không cần phải nhìn vào đó ngay bây giờ, nhưng tôi nghĩ rằng nó có thể tốt để chia sẻ trang web. Cho đến nay rất tốt, cho đến khi cài đặt toàn cầu. (Ok, một số lỗi tôi đã phải tìm ra, nhưng bây giờ tôi đã làm việc npm).

Khi nói đến điểm cố gắng cài đặt một cái gì đó trên toàn cầu, tôi gặp khó khăn.

Những gì tôi đã làm cho đến nay để thử nghiệm cài đặt một số gói trên toàn cầu:

  1. Đã tạo thư mục thử nghiệm grunttest

  2. Bên trong thư mục đó:

    npm install -g jshint

Đầu ra tôi có thể thấy:

 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)

Tôi chỉ nhận ra 304, điều này sẽ ổn, do chỉ nói rằng tài nguyên không được sửa đổi kể từ lần cài đặt cuối cùng (vài phút trước đó).

Kiểm tra xem jshint có tồn tại hay không bằng:

`npm -global list`

Đầu ra:

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

Câu hỏi:

  1. Tại sao tôi nhận được npm ERR! ngoại lai ...?
  2. Nó có nghĩa là gì?
  3. Tôi có thể giải quyết vấn đề này bằng cách nào?

Thông tin:

Tôi đang sử dụng máy tính Windows 7, sử dụng cygwin làm shell. cố gắng chỉ jshint ( jshint someTestfile.js) tất nhiên không hoạt động.

Cảm ơn trước, Meru

Câu trả lời:


208

npm ERR! extraneouscó nghĩa là một gói được cài đặt nhưng không được liệt kê trong dự án của bạn package.json.

Vì bạn đang liệt kê các gói đã được cài đặt trên toàn cầu, nó sẽ cung cấp cho bạn rất nhiều lỗi không liên quan mà bạn có thể đơn giản bỏ qua vì hầu hết những thứ được cài đặt trên toàn cầu sẽ không nằm trong dự án của bạn package.json.


1
Chào! Cảm ơn vì câu trả lời. Điều này có nghĩa là tôi cũng có thể thực thi "jshint", đúng không?
Meru

Chính xác. Đang chạy jshint myfile.jsnên chạy jshint trên myfile.js.
Kyle Robinson Young

1
Ah tôi thấy. Với Grunt, mọi thứ đều thông qua các nhiệm vụ. Bạn sẽ tải và cấu hình grunt-contrib-jshinttác vụ trong của bạn Gruntfile.js. Điều duy nhất bạn cài đặt trên toàn cầu là npm i grunt-cli -gthứ cấp cho bạn quyền truy cập để chạy gruntlệnh chạy a Gruntfile.js. Xem hướng dẫn này để biết thêm: gruntjs.com/getting-started
Kyle Robinson trẻ

8
Nếu bạn có các thư viện không liên quan được lưu cục bộ (không phải trên toàn cầu), bạn có thể chạy npm pruneđể loại bỏ chúng.
krx

2
@KyleRobinsonYoung: Làm thế nào về việc đề cập đến điều này trong câu trả lời. Bạn có thể xóa tất cả các gói không sử dụng bằng cách sử dụngnpm prune --your-env
geek_guy

21

1 & 2: Có nghĩa là bạn không có jshint được liệt kê trong tệp package.json của dự án nhưng nó đã được cài đặt toàn cầu. Vì vậy, nó không phải là một vấn đề lớn.

3: Để tránh lỗi không liên quan này , bạn có thể chạy hoặc chạy lại cài đặt với tùy chọn --save. Thao tác này sẽ tự động cập nhật tệp package.json của bạn:

npm install -g jshint --save

Hoặc cần cập nhật thủ công tệp package.json của bạn với "dependencies": {...}


trong trường hợp ma chỉ hoạt động với cục bộ mà không có bản sao toàn cầu
BG BRUNO

2
--savekhông hoạt động cùng với -g. Danh sách gói toàn cầu không có package.json.
Guido Bouman

5

Tôi đã giải quyết điều này bằng cách thực hiện npm updatetrong thư mục của gói chính đã xóa một số gói không liên quan khỏi danh sách và sau đó thực hiện npm uninstall <package>đối với một số gói còn lại.

Có vẻ như đã hiệu quả, vì tôi không gặp lỗi sau khi làm điều này.


3

Tôi đã giải quyết nó bằng cách kết hợp tất cả các câu trả lời. Lúc đầu, tôi đã cài đặt gói trên toàn cầu.

npm install -g packagename --save

Vì npm đã cài đặt gói này trên toàn cầu nhưng không thêm nó vào tệp package.json cục bộ của tôi, tôi phải làm gì đó với nó.

Tôi chọn, giải pháp gỡ bỏ cục bộ và sau đó cài đặt nó trên toàn cầu.

npm uninstall packagename
npm install -g packagename

Bằng cách này, tôi không có thêm cảnh báo và không làm xáo trộn tệp package.json.


Cộng thêm 100. Tôi đã phải gỡ cài đặt cục bộ và cài đặt trên toàn cầu.
Collin Peters

1

Tôi trường hợp của tôi, tôi đã thấy 'npm ERR này! thông báo không liên quan 'trong thiết bị đầu cuối cygwin của tôi khi tôi thực hiện một' npm ls '. Tôi đã nghĩ rằng đây là một loại thiết lập bị lỗi toàn cầu sau khi mày mò rất nhiều. Tôi học được những nhận xét sau đây:

  • 'npm ls' cung cấp các kết quả đầu ra khác nhau tùy thuộc vào vị trí thư mục hiện tại của bạn là gì.
  • 'npm ls' cố gắng phát hiện sự hiện diện của thư mục 'node_modules' trong vị trí thư mục hiện tại và liệt kê những nội dung đó. KHÔNG phải là những người toàn cầu!
  • Hơn nữa, nếu thư mục hiện tại chứa 'node_modules' cũng có tệp package.json chứa ít mô-đun hơn được liệt kê ở đây, thì lỗi sẽ hiển thị.

Tôi 'rm package.json' và 'npm ls' không còn hiển thị thông báo lỗi nữa. Vì vậy, tôi nói, hãy luôn kiểm tra vị trí hiện tại để biết sự hiện diện của thư mục 'node_modules' và tệp package.json bởi vì chúng được ưu tiên trước tiên trong kiểm tra và nếu chúng bị thiếu, kiểm tra tiếp tục đến thư mục mẹ, v.v. và nếu bạn đã mày mò rất nhiều đoạn mã, thì bạn có thể đã nằm rải rác xung quanh rất nhiều thư mục node_modules và tệp package.json. Không có gì thực sự bị hỏng ở đây, không giống như những trải nghiệm mà chúng tôi có khi thực hiện phát triển Java J2EE / eclipse IDE hoặc trong những ngày chúng tôi phải sử dụng regedit để thay đổi cài đặt trong Windows.


1

Trong trường hợp của tôi, đó là vì tên gói trong package.jsontệp của nó không giống với tên kho được liệt kê trong package.jsonmô-đun phụ thuộc. Lỗi của tôi, vì đó là một mô-đun mới tôi đã tạo, nhưng khó phát hiện, vì npm sẽ không đưa ra bất kỳ manh mối nào.

Điều này đã xảy ra khi sử dụng dependencies: { "my-module": "file:local-modules/mymodule" }cú pháp, với lỗi đánh máy trong tên "my-module".


0

Điều này là do gói của bạn không có trong package.json của bạn. Nếu bạn thêm nó, vấn đề sẽ được giải quyết, vui lòng xem hình ảnh bên dưới:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.