Nếu kịch bản của bạn được thiết kế để sử dụng bởi các nhà phát triển Node, bạn nên hoàn toàn chỉ cần sử dụng
#!/usr/bin/env node
và không bận tâm cố gắng để tương thích với những người chỉ đã cài đặt Node như nodejs
.
Lý do:
- Đó là những gì những đứa trẻ mát mẻ đang làm, và nếu bạn không làm điều đó quá, bạn không mát. Các dự án nút chính như jshint, karma, bower và thậm chí npm chỉ cần sử dụng
#!/usr/bin/env node
làm hình thái cho các tập lệnh thực thi của chúng.
- Vì những đứa trẻ tuyệt vời đang làm việc đó, bất kỳ ai làm việc với Node trên Ubuntu đều đã thiết lập một số
/usr/bin/node
làm liên kết tượng trưng đến nodejs
. Có highly-viewed instructions khi thực hiện việc này tại đây trên Stack Overflow và trên toàn bộ web. Thậm chí có cả gói nodejs-legacy
có toàn bộ mục đích 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 nếu họ muốn sử dụng nhiều phần mềm bất kỳ được viết trong Node.
- Vấn đề dường như không còn tồn tại nữa trên Ubuntu 14.04; Tôi vừa mới tẩy sạch Node và chạy một số
apt-get install nodejs
và nó đã tạo /usr/bin/node
làm liên kết tượng trưng đến /etc/alternatives/node
. Những người bị ảnh hưởng bởi vấn đề này là, tôi nghi ngờ, một thiểu số thu hẹp.
Thậm chí nếu bạn đang nhắm mục tiêu người Node-không biết chữ, bạn vẫn có thể muốn sử dụng #!/usr/bin/env node
, có lẽ thêm sự cần thiết có thể cho tay tạo liên kết tượng trưng hoặc cài đặt của gói nodejs-legacy
để tài liệu hướng dẫn cài đặt của bạn nếu bạn thấy cần thiết. Lưu ý rằng nếu ai đó với nodejs
nhưng không node
cố gắng sẵn để chạy chương trình của bạn với công việc trên, họ sẽ thấy:
/usr/bin/env: nút: Không có tập tin hoặc thư mục
và Googling that 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ự, tuyệt vọng muốn chắc chắn 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 nơi nodejs
có sẵn nhưng node
không phải là (hoặc nơi node
thực sự là Amateur Packet Radio Node program), sau đó bạn có thể sử dụng "hai dòng công việc" lấy từ Unix & Linux Stack Exchange:
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "[email protected]"
console.log('Hello world!');
nhưng bạn có thực sự cần phải làm điều này khi hầu như không có ai khác trong thế giới Node là?
Nguồn
2015-02-21 14:09:22
bạn có thể tạo một kịch bản trình bao bọc để gọi tập lệnh của bạn, tìm cách xác định vị trí của nút và thời gian được gọi. – Doon
Rất nhiều đề xuất trong câu trả lời này trên trang web Unix - http://unix.stackexchange.com/questions/65235/universal-node-js-shebang – sargant
Tôi có một tập lệnh nodejs mà tôi đã thay đổi từ '#!/Usr/bin/node' thành '#!/usr/bin/nodejs' khi tôi nâng cấp từ Ubuntu 12.04 lên 12.10. Và nó được gọi từ một wrapper để kiểm tra cả hai. Để thảo luận về hack '#!/Usr/bin/env', hãy xem [câu hỏi này] (http://unix.stackexchange.com/q/29608/10454) và [câu trả lời của tôi] (http: // unix. stackexchange.com/questions/29608/why-is-it-better-to-use-usr-bin-env-name-instead-of-path-to-name-as-my/29620#29620). –