nvm không tương thích với tùy chọn tiền tố cấu hình npm config:


207

Tôi đang cố chạy một phiên bản NodeJS khác nvmnhưng gặp lỗi này:

$ nvm use v4.2.4

nvm is not compatible with the npm config "prefix" option: 
   currently set to "/Users/z/.npm-global"
Run `npm config delete prefix` or `nvm use --delete-prefix v4.2.4` to unset it.

Tôi có mục đích đặt tiền tố của mình nhằm tránh sudo npm(xem https://docs.npmjs.com/getting-started/fixing-npm-permissions ).

Có cách nào tôi có thể sử dụng nvmmà không mất tiền tố cho các gói được cài đặt trên toàn cầu không?


Tôi sử dụng tiền tố xóa cấu hình npm để khắc phục điều này, không có vấn đề gì cho đến nay
ggdx

@DanWhite Nếu tôi xóa tiền tố, tôi mất chuyển hướng cài đặt toàn cầu của mình vào thư mục chuyên dụng.
Dmitri Zaitsev

5
(nvm duy trì ở đây) Đó là điểm. Với nvm, nó, không phải bạn, quản lý cài đặt toàn cầu của bạn. Một cách riêng biệt, cài đặt toàn cầu không bao giờ được chia sẻ trên các phiên bản nút.
LJHarb

2
Mỗi bản sao của nút đi kèm với npm riêng, xác định cài đặt riêng của nó.
LJHarb

1
Thật vậy, mỗi phiên bản nút được chọn với nvm là per-shell - đó là theo thiết kế.
LJHarb

Câu trả lời:


378

Xóa và đặt lại tiền tố

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

Lưu ý: Thay đổi số phiên bản với số được chỉ định trong thông báo lỗi.

nvm không tương thích với tùy chọn "tiền tố" cấu hình npm: hiện được đặt thành "/ usr / local" Run "npm config xóa tiền tố" hoặc "nvm use --delete-prefix v6.11.1 --silent" để bỏ đặt nó.


Tín dụng cho @gabfiocchi trên Github - "Bạn cần ghi đè lên tiền tố nvm"


10
Điều này làm việc như một nét duyên dáng! Chỉ cần lấy phiên bản nút của tôi.
Sirius_B

Tôi dường như có một liên kết tượng trưng / usr / local / bin / nút sẽ khiến thiết bị đầu cuối tích hợp trong vscode thấy một phiên bản nút mà nó không nên thấy. Thực hiện theo các bước trên và sau đó xóa liên kết tượng trưng dường như đã khắc phục vấn đề. Nút và npm của tôi được quản lý bởi nvm ngay bây giờ
Sudhanshu Mishra

Điều này hoạt động hoàn hảo. chỉ cần đừng bỏ lỡ để đặt tiền tố phiên bản nút, bạn sẽ sử dụng. npm config set prefix $NVM_DIR/versions/node/<node-version-directory>
Hiren

3
Điều này chỉ hoạt động trong cửa sổ hiện tại. Nếu bạn mở một shell mới hoặc một cửa sổ mới, bạn phải làm lại từ đầu.
jtiscione

3
Tôi phải làm những thứ này theo thứ tự. 1. nvm sử dụng --delete-prefix vx.xx --silent 2. npm config xóa tiền tố 3. npm config đặt tiền tố $ NVM_DIR / phiên bản / nút / vx.xx
Guangtong Shen

66

Tôi đã có cùng một vấn đề và thực thi npm config delete prefixđã không giúp tôi.

Nhưng điều này đã làm:

Sau khi cài đặt nvm bằng brew, hãy tạo ~/.nvmthư mục:
$ mkdir ~/.nvm

và thêm các dòng sau vào ~/.bash_profile:

export NVM_DIR=~/.nvm
. $(brew --prefix nvm)/nvm.sh

(Kiểm tra xem bạn không có nvm lệnh khác có liên quan trong bất kỳ ~/.bashrchay ~/.profilehay ~/.bash_profile)

Mở một thiết bị đầu cuối mới và lần này nó không nên in bất kỳ thông báo cảnh báo nào.
Kiểm tra xem nvm có hoạt động không bằng cách thực thi nvm --versionlệnh.
Sau đó, cài đặt / cài đặt lại NodeJS bằng cách sử dụng nvm install node && nvm alias default node.

Thêm thông tin

Tôi đã cài đặt nvmbằng cách sử dụng homebrewvà sau đó tôi nhận được thông báo này:

Xin lưu ý rằng ngược dòng đã yêu cầu chúng tôi thực hiện quản lý nvm rõ ràng thông qua Homebrew không được họ hỗ trợ và bạn nên kiểm tra mọi sự cố đối với phương pháp cài đặt nvm tiêu chuẩn trước khi báo cáo.

Bạn nên tạo thư mục làm việc của NVM nếu nó không tồn tại:

 mkdir ~/.nvm

Thêm ~/.bash_profiletệp sau vào hoặc tệp cấu hình shell mong muốn của bạn:

 export NVM_DIR=~/.nvm
 . $(brew --prefix nvm)/nvm.sh

Bạn có thể đặt $NVM_DIRthành bất kỳ vị trí nào, nhưng không thay đổi vị trí đó /usr/local/Cellar/nvm/0.31.0sẽ phá hủy mọi cài đặt Node được cài đặt nvm khi nâng cấp / cài đặt lại.

Bỏ qua nó đưa tôi đến thông báo lỗi này:

nvmkhông tương thích với npm configtùy chọn "tiền tố": hiện được đặt thành "/usr/local/Cellar/nvm/0.31.0/versions/node/v5.7.1"
Chạy nvm use --delete-prefix v5.7.1 --silentđể bỏ đặt nó.

Tôi đã làm theo một hướng dẫn trước đó (từ homebrew/nvm) và sau đó tôi thấy rằng tôi cần phải cài đặt lại NodeJS. Tôi cũng vậy:

nvm install node && nvm alias default node

và nó đã được sửa.

Cập nhật: Sử dụng brew để cài đặt NVM khiến cho Terminal khởi động chậm. Bạn có thể làm theo hướng dẫn này để giải quyết nó.


6
nvm alias default nodedường như đã giúp tôi trong trường hợp của tôi
mirkobrankovic

28
(nvm duy trì ở đây) nvmkhông được hỗ trợ khi cài đặt qua brew. Vui lòng gỡ cài đặt nó và sử dụng phương pháp thích hợp, tập lệnh curl trong readme.
LJHarb

3
Tôi đã sử dụng kịch bản curl để cài đặt nvm. Câu trả lời này không làm việc cho tôi.
intcreator

1
@intcreator Cảm ơn. Tôi đã kết thúc việc cài đặt hoàn toàn nút mới bằng cách sử dụng nvm dựa trên hướng dẫn này: nearform.com/blog/how-to-manage-node-js-sudo-free-with-nvm Và cuối cùng tôi bị treo máy. được cài đặt bằng homebrew, không còn được hỗ trợ. Nó đã để lại rất nhiều tàn dư cần một thời gian để xóa, và sau đó tôi phải rm -rf node_moduleschạy npm installlại, vì các thư mục đã có vấn đề về quyền hạn.
Jake T.

1
Để rõ ràng cho hậu thế, tôi đã phải làm một brew remove node -f, trong đó loại bỏ tất cả các phiên bản đã cài đặt. Làm điều này trước, sau đó làm theo hướng dẫn trong liên kết của tôi ở trên, sau đó loại bỏ node_modules. Bạn nên cài đặt sạch! Tôi nghĩ rằng sau đó bạn cũng phải cài đặt npm, mà tôi chỉ làm theo hướng dẫn từ một bài viết của nodejs.org đã bật lên khi tôi tìm kiếm nó. npm install npm@latest -glà lệnh, một khi bạn cài đặt nút.
Jake T.

31

Đây có thể là một xung đột với cài đặt Node cục bộ của bạn (nếu bạn đã cài đặt nó qua một cách khác so với NVM trong quá khứ). Bạn nên xóa thể hiện của nút này:

  1. loại bỏ node_modules sudo rm -rf /usr/local/lib/node_modules
  2. loại bỏ nút sudo rm /usr/local/bin/node
  3. loại bỏ liên kết nút cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

Sau khi bạn không thể cài đặt nvm


9
Bạn có muốn tăng câu trả lời chỉ mã của bạn với một số giải thích? Các ý kiến ​​là không đủ, bởi vì các dòng lệnh của bạn phức tạp hơn được giải thích bởi chúng. Xây dựng lý do tại sao các chi tiết câu trả lời của bạn giải quyết vấn đề. Tương phản câu trả lời của bạn so với câu trả lời cũ hơn. Điều gì làm cho câu trả lời của bạn trở thành một giá trị gia tăng cho câu hỏi này?
Yunnosch

Đối với tôi, dòng mã đầu tiên trống rỗng (mà bạn đã thêm gần đây) cần lời giải thích riêng ...
Yunnosch

Sau năm tháng trên StackOverflow, hãy xem xét tham gia chuyến tham quan trợ giúp được hướng dẫn rất sáng suốt .
Yunnosch

Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Xin vui lòng cố gắng không làm đông mã của bạn với các bình luận giải thích, điều này làm giảm khả năng đọc của cả mã và các giải thích!
Filnor

"Sau khi bạn không thể cài đặt nvm" Vì vậy, nếu mục tiêu của tôi là sử dụng nvm, tôi không nên làm điều này?
Jake T.

18

Lỗi này có thể xảy ra khi đường dẫn thư mục cài đặt NVM của bạn có Liên kết tượng trưng .

Giải trình

Đường dẫn cài đặt mặc định của NVM là: $HOME/.nvmnhưng thư mục nhà của bạn có thể là một liên kết tượng trưng cho một ổ đĩa khác, như trường hợp của tôi.

Ví dụ, thư mục nhà của tôi là Liên kết tượng trưng cho ổ đĩa khác:

/home/myuser -> /bigdrive/myuser

Điều này gây ra vấn đề tiền tố.

Giải pháp

Trên tập lệnh khởi động của bạn (.bashrc hoặc .zshrc hoặc khác), thay đổi thư mục NVM thành đường dẫn trực tiếp.

Vd : NVM_DIR="/bigdrive/myuser/.nvm".

.bashrc

export NVM_DIR="/bigdrive/myuser/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Cảm ơn! Câu trả lời của bạn sẽ có nhiều khả năng hiển thị hơn
ben

Không. Tôi chiên não để hiểu lỗi điên rồ này. Tôi không tìm thấy bất kỳ bài viết nào giúp tôi. Tôi đã phải chiến đấu hết mình để giải quyết vấn đề. Tôi rất vui được giúp đỡ bạn. Bình chọn cho câu trả lời của tôi để được hiển thị nhiều hơn.
André Avelar

tiếng vang của tôi $ NVM_DIR là "/Users/vijayshanker/.nvm" nếu tôi đặt "export NVM_DIR =" / Users / vijayshanker / .nvm (và phần còn lại) "trong bashrc, đã thử nhưng nó vẫn không sửa được. 6 giờ, xin vui lòng lưu ý: tôi chưa cài đặt npm, tôi đã không cài đặt nút của mình từ npm
vijay shanker

một giải pháp có thể để xuất NVM_DIR = $ (readlink -f "$ HOME / .nvm") trong .bashrc hoặc dòng lệnh. Điều này sẽ xóa tất cả symlink khỏi $ HOME / .nvm và xuất một đường dẫn đầy đủ đơn giản chỉ với các thư mục thực.
Nimlar

10

Tôi đã chạy vào đây trong khi sử dụng nút được cài đặt qua nvm, với nvmcài đặt qua homebrew. Tôi đã giải quyết nó bằng cách chạy brew uninstall nvm, rm -rf $NVM_DIRsau đó cài đặt lại nvm bằng cách sử dụng tập lệnh cài đặt chính thức và cài đặt lại phiên bản nút tôi cần.

Lưu ý: Tôi cũng đã $NVM_DIRgắn kết và liên kết. Tôi chuyển nó trở lại vào homedir của tôi.


8

Nó có thể là vấn đề nếu bạn có thư mục chính của bạn được gắn ở đâu đó, do nvm không hoạt động đúng với các liên kết tượng trưng. Bởi vì tôi không quan tâm $ NVM_DIR của tôi nằm ở đâu nên tôi chạy cái này và tất cả đều hoạt động tốt:

$ mv ~/.nvm /tmp/
$ export NVM_DIR="/tmp/.nvm"
$ nvm use --delete-prefix v6.9.1

6

nhập mô tả hình ảnh ở đâyTôi đã có cùng một vấn đề và nó thực sự gây phiền nhiễu mỗi lần với thiết bị đầu cuối. Tôi chạy lệnh đến thiết bị đầu cuối và nó đã được sửa

Đối với những người cố gắng loại bỏ nvm từ bia

nó có thể không đủ để chỉ cần gỡ cài đặt nvm

nếu bạn thấy tiền tố npm vẫn còn / usr / local, hãy chạy lệnh này

sudo rm -rf /usr/local/ đũalib / node đũa, /. npm,_modules Bolog,bin,share / manspl / nbnpm*, node *, man1 / node *


4

Tôi có thông báo lỗi tương tự nhưng giải pháp khác. Đường dẫn tự động trong khi curl (install.sh) không khớp. Kiểm tra điều này với:

echo $NVM_DIR

Trong trường hợp của tôi : /var/www//.nvm. Hiển thị trong tệp bash được tạo tự động của bạn và thay đổi nó và thay thế nó: (~ / .bash_profile, ~ / .zshrc, ~ / .profile hoặc ~ / .bashrc)

thay thế

export NVM_DIR="$HOME/.nvm"

với (ví dụ)

export NVM_DIR="$HOME.nvm"

Đến đây để đưa ra nhận xét tương tự :) Trong trường hợp của tôi là vì khi tôi tạo người dùng, tôi đặt nhà là useradd --home / home / user / với dấu vết / Tôi đã xóa khỏi tệp / etc / passwd và mọi thứ bắt đầu hoạt động một lần nữa
Israel

1

Tôi đã theo dõi https://stackoverflow.com/a/47861348/2391795 câu trả lời nhưng nó không hoạt động tốt.

$ npm config delete prefix 
$ npm config set prefix $NVM_DIR/versions/node/v6.11.1

Sau khi chạy các lệnh được đề xuất, nvm của tôi không hoạt động nữa, chạy nvm usesẽ hiển thị phiên bản nút thích hợp đang được sử dụng, nhưng chạy node -vsẽ hiển thị khác. Không thể thay đổi phiên bản của nút nữa.

Tôi đã gỡ cài đặt và cài đặt lại nvm hoàn toàn để sửa nó. Tôi đã theo dõi https://github.com/creationix/nvm#manual-uninstall bằng cách chạy

$ rm -rf "$NVM_DIR"

Sau đó chỉnh sửa của tôi .zshrcđể loại bỏ các dòng liên quan đến nvm, trong trường hợp của tôi là

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Sau đó, bắt đầu một shell mới (để nvm không được tải trong shell mới này) và chạy https://github.com/creationix/nvm#install-script

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

Mà thêm nvm các dòng tôi đã loại bỏ trước đây của tôi .zshrc.

Sau đó tôi đã có thể sử dụng nvm như trước đây. Tôi đoán đó là một trường hợp kỳ lạ là mọi thứ đã sai và buộc tôi phải cài đặt lại mọi thứ, không giống như hầu hết mọi người trải qua điều này do vấn đề này.


1

Hãy để tôi mô tả tình hình của tôi.

Đầu tiên, hãy kiểm tra cấu hình hiện tại

$ nvm use --delete-prefix v10.7.0
$ npm config list

Sau đó, tôi tìm thấy cấu hình lỗi trong đầu ra:

; project config /mnt/c/Users/paul/.npmrc
prefix = "/mnt/c/Users/paul/C:\\Program Files\\nodejs"

Vì vậy, tôi đã xóa C:\\Program Files\\nodejstrong /mnt/c/Users/paul/.npmrc.


1

Tôi đã giải quyết vấn đề này khi nó hiển thị trên Thiết bị đầu cuối VSCode và JetBrains, nhưng không phải trong thiết bị đầu cuối gốc bằng các lệnh sau:

ls -la /usr/local/bin | grep "np[mx]"

Điều này sẽ cung cấp cho bạn đường dẫn được giải quyết ở cuối:

... npm -> ../lib/node_modules/npm/bin/npm-cli.js
... npx -> ../lib/node_modules/npm/bin/npx-cli.js

Từ đó, xóa các tệp và khởi chạy lại Mã VS sẽ khắc phục sự cố:

rm -R /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm -R /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

sửa liên kết: https://github.com/nvm-sh/nvm/issues/1690#issuecomment-392014774


0

Tôi đang tìm kiếm một giải pháp cho vấn đề tiền tố nvm tìm thấy câu hỏi này (trước khi tìm giải pháp). Đây là "hộp thoại" shell của tôi. Tôi hy vọng, nó có thể hữu ích cho ai đó. Tôi đã có thể đặt thành tiền tố với sự trợ giúp của bài đăng này: https://github.com/npm/npm/issues/6592

Khi tôi đã thử npm config delete prefixhoặc nvm use --delete-prefixtrước khi sử dụng npm --prefix="" set prefix "", tôi chỉ nhận được: npm ERR! không ổn mã 0

Lưu ý rằng bạn sẽ phải lặp lại quy trình tương tự với mọi phiên bản nút, tiền tố được đặt lại (trong trường hợp của tôi) / usr / local sau khi cài đặt.

    $ nvm install 0.10
    ######################################################################## 100.0%
    nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ npm --prefix="" set prefix ""
    $ nvm use 0.10.44
    nvm is not compatible with the npm config "prefix" option: currently set to "/home/john"
    Run `npm config delete prefix` or `nvm use --delete-prefix v0.10.44` to unset it.
    $ nvm use --delete-prefix v0.10.44
    Now using node v0.10.44 (npm v1.3.10)
    $ nvm ls
    v0.10.44
             v4.4.3
    ->       system
    default -> 4.4.3 (-> v4.4.3)
    node -> stable (-> v4.4.3) (default)
    stable -> 4.4 (-> v4.4.3) (default)
    iojs -> N/A (default)
    $ npm config get prefix
    /usr/local

0

Tôi gặp vấn đề này sau khi chuyển thư mục nhà của tôi sang một ổ đĩa mới trên linux. Nó đã được sửa bằng cách xóa thư mục .nvm và cài đặt lại nvm


0

Chỉ cần giải quyết vấn đề. Tôi liên $HOME/.nvmkết với $DEV_ZONE/env/node/nvmthư mục. Tôi đã phải đối mặt với vấn đề tương tự. Tôi thay thế NVM_DIRtrong $HOME/.zshrcnhư sau

export NVM_DIR="$DEV_ZONE/env/node/nvm"

BTW, vui lòng cài đặt NVM bằng cách sử dụng curlhoặc wgetlệnh không sử dụng brew. Để biết thêm xin vui lòng kiểm tra nhận xét trong vấn đề này trên Github: 855 #suecomment-146115434


Còn cài đặt nvmvới npm?
Dmitri Zaitsev

1
Cài đặt nvm thông qua homebrew chính thức bị phản đối và dẫn đến các vấn đề do một số không tương thích. Cách chính thức là sử dụng curl / wget, xem github.com/creationix/nvm#install-script xem github.com/creationix/nvm/issues/298#issuecomment-152255091 Cài đặt qua npm không được hỗ trợ AFAIK, vì nvm không được hỗ trợ npm, vì vậy nếu npm cũng cài đặt nvm, nó có thể dẫn đến các trường hợp cạnh. Bạn có thể đọc về nó về vấn đề tôi liên kết trước đây.
Vadorequest

0

Tôi chỉ có một ý tưởng. Sử dụng liên kết tượng trưng để giải quyết lỗi và bạn vẫn có thể sử dụng tiền tố của mình cho các gói được cài đặt trên toàn cầu. ln -s [your prefix path] [path in the '~/.nvm'] sau đó bạn sẽ có một thư mục tượng trưng trong ~/.nvmthư mục, nhưng trên thực tế, các gói toàn cầu của bạn vẫn được cài đặt trong [đường dẫn tiền tố của bạn]. Sau đó, lỗi sẽ không hiển thị lại và bạn có thể sử dụng nvm use **bình thường. ps: nó làm việc cho tôi vào mac. pps: đừng quên đặt $PATHvào binthư mục npm của bạn để sử dụng các gói được cài đặt trên toàn cầu.


-2

Lưu ý:
để xóa, xóa hoặc gỡ cài đặt nvm - chỉ cần xóa $NVM_DIRthư mục (thông thường ~/.nvm)
bạn có thể thử:
rm -rf ~/.nvm

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.