Không thể cài đặt NodeJs: / usr / bin / env: node: Không có tệp hoặc thư mục như vậy


302

Tôi đang cố gắng cài đặt nodeJs vào Ubuntu 14.04 của mình để sử dụng GruntJs.

Tôi đã đọc về Ubuntu cách làm khác nhau ( các vấn đề? ), Vì vậy đây là những gì tôi đã làm để cài đặt nó:

sudo apt-get install npm

sudo npm install -g grunt-cli

Gõ tiếng càu nhàu sau đó tôi đã gặp lỗi:

/usr/bin/env: node: No such file or directory

Vì vậy, tôi đã thử:

curl -sL https://deb.nodesource.com/setup | sudo bash -

sudo apt-get install -y nodejs

sudo apt-get update

Và thử lại và vẫn nhận được lỗi, tôi đã thử:

sudo add-apt-repository https://launchpad.net/~chris-lea/+archive/node.js/

sudo apt-get install -y nodejs

Tôi đã nhận được tin nhắn này:

nodejs is already the newest version.
0 to upgrade, 0 to newly install, 0 to remove and 3 not to upgrade.

Tôi đã thử dọn dẹp chỉ trong trường hợp:

sudo apt-get autoremove

Nhưng không, lỗi vẫn còn đó: khi tôi gõ grunt tôi vẫn nhận được /usr/bin/env: node: No such file or directory

Tôi nên làm gì?

Câu trả lời:


794

Làm một liên kết tượng trưng giải quyết vấn đề:

ln -s /usr/bin/nodejs /usr/bin/node

(Cảm ơn tôi và +1 phiếu bầu cho câu trả lời của Bodokaiser ).


97
sudo apt-get install nodejs-legacytạo liên kết này quá, xem mô tả ở packages.debian.org/sid/nodejs-legacy
techtonik Anatoly

1
Các symlink đã giải quyết vấn đề và tiết kiệm rất nhiều thời gian phát triển. Cảm ơn!
Farzad YZ

Sửa chữa này là nghiêm túc một cứu cánh. Đặc biệt, nếu bạn đang làm theo hướng dẫn cấp phép sửa chữa ở đây docs.npmjs.com/getting-started/fixing-npm-permissions
Josh Frankel

Cảm ơn bạn! Điều này đã tiết kiệm buổi chiều của tôi, cố gắng thiết lập một ứng dụng nút trên google cloud Linux.
jovan

1
Bạn nên sử dụng which nodeđể bạn có được đường dẫn chính xác đến nút của bạn. Vì vậy, lệnh sẽ làln -s "$(which node)" /usr/bin/node
technogeek1995

117

Vấn đề không phải là phiên bản của nút. Thay vào đó, đó là cách NodeJS được cài đặt theo mặc định trong Ubuntu. Khi chạy ứng dụng Node trong Ubuntu, bạn phải chạy nodejs somethign.jsthay vìnode something.js

Vì vậy, tên ứng dụng được gọi trong thiết bị đầu cuối là nodejsvà không node. Đây là lý do tại sao có một nhu cầu cho một liên kết tượng trưng chỉ đơn giản là chuyển tiếp tất cả các lệnh nhận như nodeđể nodejs.

ln -s /usr/bin/nodejs /usr/bin/node

6
Bạn sẽ cần chạy lệnh này với sudo, nếu bạn gặp lỗi "ln: fail khi tạo liên kết tượng trưng '/ usr / bin / nút'"
Suraj Dubey

ln -s / usr / bin / nodejs / usr / bin / node
rd_

54

Tôi nghĩ bạn nên nâng cấp phiên bản nút mới nhất

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

1
Chỉ là một mẹo; thụt dòng mã của bạn bằng 4 khoảng trắng;) cũng nkhông phải là lệnh liên kết với Node.JS.
Qix - MONICA ĐƯỢC PHÂN PHỐI

@David dựa trên mô tả gói trên NPM : "Quản lý tương tác tất cả các phiên bản nút của bạn"
frdmn

Giải quyết vấn đề cho tôi
criticerz

tôi đã sao chép một laraveldự án từ windowsmáy sang ubuntu 16.04laravel mixcó vấn đề với npm run watchVÀ giải pháp này đã có hiệu quả với tôi và bây giờ vấn đề đã biến mất
AN

29

nếu bạn có thể truy cập nút trên thiết bị đầu cuối Ubuntu bằng lệnh nodejs, thì vấn đề này có thể được giải quyết đơn giản bằng cách tạo ra một liên kết tượng trưng của nút và nút bằng cách sử dụng

ln -s /usr/bin/nodejs /usr/bin/node

và điều này có thể giải quyết vấn đề




9

Tôi thấy đây thường là một lỗi đặt tên sai, nếu bạn cài đặt từ trình quản lý gói, bin của bạn có thể được gọi là nodejs vì vậy bạn chỉ cần liên kết với nó như vậy

ln -s /usr/bin/nodejs /usr/bin/node

1
Thay vì thêm một phản hồi tiêu cực, hãy cho tôi biết ở đây trong bình luận có gì sai, để tôi có thể giúp bạn với điều đó. Vì không có gì sai trong việc tạo một liên kết tượng trưng đặc biệt là nếu nó giúp bạn quản lý mọi thứ tốt hơn.
Ahmad Awais

1
Tôi cho bản thân mình thích phương pháp này. Nó sạch sẽ.
Muhammad Gelbana

8

Nếu bạn đã cài đặt nodejs (kiểm tra which nodejs) và không muốn cài đặt gói khác, bạn có thể, với quyền root:

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 99

Đây là cách Debian thích hợp.
Tonin

6

Khi tôi đang sử dụng gulp tôi đã gặp lỗi này.

~$ gulp

/ usr / bin / env: 'node': Không có tệp hoặc thư mục như vậy

Điều này đã được loại bỏ bằng cách thực hiện lệnh sau, bạn phải nhớ rằng thư mục / usr / bin có tất cả các quyền.

~$ ln -s /usr/bin/nodejs /usr/bin/node

cái này hiệu quả với tôi ..


5

Tùy thuộc vào cách bạn cài đặt nút của mình, hầu hết thời gian có thể không có trong / usr / bin /, trong trường hợp của riêng tôi, tôi đã sử dụng nvm để cài đặt để nút của tôi nằm trong ./nvm/versions.

Sử dụng lệnh này which nodetôi đã tìm ra đường dẫn, nhưng để làm việc dễ dàng hơn, bạn có thể chạy lệnh này.

nodepath=$(which node); sudo ln -s $nodepath /usr/bin/node

lệnh trên sẽ lấy vị trí của nút của bạn và tạo liên kết cho bạn.


5

Có hai giải pháp cho vấn đề này:

a) Đặt biến PATH của bạn để bao gồm "/ usr / local / bin"

export PATH="$PATH:/usr/local/bin"

b) Tạo một liên kết tượng trưng đến "/ usr / bin" đã có trong PATH của bạn

ln -s /usr/bin/nodejs /usr/bin/node

Tôi hy vọng nó sẽ giúp.


4

Trong khi đó ln -slà cách khắc phục dễ dàng nhất, một phần giải thích:

Do xung đột với gói khác, tệp thực thi từ kho Ubuntu được gọi là nodejs thay vì nút. Hãy ghi nhớ điều này khi bạn đang chạy phần mềm.

Lời khuyên này xuất hiện, khi cài đặt sudo apt-get install nodejs.

Vì vậy, một số công cụ được biết đến khác (tôi không biết nó làm gì. Trong khi được biết đến với kho lưu trữ Ubuntu, nó không được cài đặt theo mặc định trong 16.04) chiếm không gian tên đó.

Sẽ thật tuyệt, nếu Ubuntu đã đưa ra một lời khuyên làm thế nào để sửa lỗi này một cách "sạch sẽ", nếu không bằng cách làm bằng tay thì gói đó sẽ làm gì. (một vụ va chạm vẫn là một vụ va chạm ... nếu + khi nó xảy ra)


1
@ tom-hale trả lời là cách Ubuntu cho việc này. Bạn sử dụng các lựa chọn thay thế để chỉ định nút chính xác
kervin


2

Đối với liên kết trường hợp của tôi đã không làm việc như sau

ln -s / usr / bin / nodejs / usr / bin / nút

Nhưng bạn có thể mở / usr / local / bin / lessc với quyền root và thay đổi dòng đầu tiên từ nút thành nodejs.

- Nút #! / usr / bin / env

+ #! / usr / bin / env nodejs


2

Thực hiện theo các lệnh này để khắc phục vấn đề.

Trong một thiết bị đầu cuối:

  1. Làm sạch toàn bộ bộ đệm NPM:

    $ sudo npm cache clean -f
  2. sudo npm install -g n
  3. Cài đặt phiên bản ổn định mới nhất của Node.js:

    sudo n stable

Bây giờ phiên bản mới nhất của Node.js đã được cài đặt. Kiểm tra phiên bản bằng cách sử dụng:

node -v


0

Đối với tôi câu trả lời được chấp nhận đã không làm việc. Tôi bắt đầu như đề xuất ở đây:

ln -s /usr/bin/nodejs /usr/bin/node

Sau khi làm điều này, tôi đã nhận được lỗi sau:

/usr/local/lib/node_modules/npm/bin/npm-cli.js:85 let notifier = quiries ('update-notifier') ({pkg}) ^^ ^

Cú pháp: Khai báo theo phạm vi khối (let, const, function, class) chưa được hỗ trợ bên ngoài chế độ nghiêm ngặt tại export.runIn ThisContext (vm.js: 53: 16) tại Module._compile (module.js: 374: 25) tại Object. Module._extensions..js (module.js: 417: 10) tại Module.load (module.js: 344: 32) tại Function.Module._load (module.js: 301: 12) tại Function.Module.runMain ( module.js: 442: 10) khi khởi động (node.js: 136: 18) tại node.js: 966: 3

Giải pháp là tải xuống phiên bản nút mới nhất từ https://nodejs.org/en/doad/ .

Sau đó, tôi đã làm:

sudo tar -xf node-v10.15.0-linux-x64.tar.xz --directory /usr/local --strip-components 1

Bây giờ bản cập nhật cuối cùng đã thành công: npm -vthay đổi từ 3.2.1 thành 6.4.1

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.