Nếu tập lệnh của bạn dành cho các nhà phát triển Node sử dụng, bạn hoàn toàn chỉ nên sử dụng
#!/usr/bin/env node
và không cần cố gắng tương thích với những người chỉ cài đặt Node là nodejs
.
Cơ sở lý luận:
- Đó là điều mà những đứa trẻ tuyệt vời đang làm, và nếu bạn không làm điều đó, bạn cũng không thú vị. Các dự án nút chính như jshint , karma , bower , và thậm chí là npm chỉ đơn giản sử dụng
#!/usr/bin/env node
làm shebang cho các tập lệnh thực thi của chúng.
- Bởi vì những đứa trẻ tuyệt vời đang làm điều đó, bất kỳ ai làm việc với Node trên Ubuntu đều thiết lập
/usr/bin/node
một liên kết tượng trưng nodejs
. Có nhiều hướng dẫn về cách thực hiện điều này ở đây trên Stack Overflow và trên toàn bộ web. Thậm chí còn nodejs-legacy
có gói có mục đích toàn bộ là tạo liên kết tượng trưng này cho bạn. Những người sử dụng Node biết cách khắc phục sự cố này trên Ubuntu, và họ phải làm thế nào nếu họ muốn sử dụng khá nhiều phần mềm từng được viết bằng Node.
- Vấn đề dường như không còn tồn tại trên Ubuntu 14.04; Tôi vừa xóa Node và chạy một
apt-get install nodejs
và nó được tạo /usr/bin/node
dưới dạng liên kết biểu tượng /etc/alternatives/node
. Tôi nghi ngờ những người bị ảnh hưởng bởi vấn đề này là một thiểu số đang thu hẹp lại.
Ngay cả khi bạn đang nhắm mục tiêu đến những người mù chữ Node, bạn vẫn có thể muốn sử dụng #!/usr/bin/env node
, có thể thêm nhu cầu có thể tạo liên kết biểu tượng thủ công hoặc cài đặt nodejs-legacy
gói vào tài liệu cài đặt của bạn nếu bạn thấy cần thiết. Lưu ý rằng nếu ai đó có nodejs
nhưng không node
có sẵn cố gắng chạy chương trình của bạn với shebang ở trên, họ sẽ thấy:
/ usr / bin / env: node: Không có tệp hoặc thư mục nào như vậy
và Googling sẽ cung cấp cho họ bản sửa lỗi trong kết quả đầu tiên và nhiều lần trên trang đầu tiên.
Nếu bạn thực sự, thực sự muốn đảm bảo rằng người dùng có thể chạy phần mềm của bạn trên một hệ thống nodejs
có sẵn nhưng node
không có (hoặc node
thực sự là chương trình Amateur Packet Radio Node ), thì bạn có thể sử dụng "hai dòng shebang" này. từ Unix & Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
nhưng bạn có thực sự cần làm điều này khi hầu như không có ai khác trong thế giới Node không?