Saya mencoba membuat skrip untuk node.js yang akan berfungsi di berbagai lingkungan. Khususnya bagi saya, saya beralih antara OS X dan Ubuntu. Di versi sebelumnya, Node diinstal sebagai node
, tetapi di versi terakhir ini diinstal nodejs
. Di bagian atas skrip saya, saya dapat memiliki:
#!/usr/bin/env node
atau
#!/usr/bin/env nodejs
Saya lebih suka skrip dijalankan sebagai yang dapat dieksekusi untuk lingkungan mana pun selama node diinstal daripada memiliki satu atau yang lain harus menentukan perintah ( ./script-name.js
vs. node script-name.js
).
Apakah ada cara untuk menentukan hashbang cadangan atau yang kompatibel dalam kedua kasus untuk node.js?
#!/usr/bin/node
menjadi#!/usr/bin/nodejs
ketika saya memutakhirkan dari Ubuntu 12.04 ke 12.10. Dan itu dipanggil dari pembungkus yang memeriksa keduanya. Untuk diskusi tentang#!/usr/bin/env
peretasan, lihat pertanyaan ini dan jawaban saya .Jawaban:
Jika skrip Anda ditujukan untuk digunakan oleh pengembang Node, Anda harus benar-benar menggunakan
#!/usr/bin/env node
dan tidak perlu repot-repot mencoba kompatibilitas dengan orang yang hanya menginstal Node sebagai
nodejs
.Alasan:
#!/usr/bin/env node
sebagai shebang untuk script executable mereka./usr/bin/node
sebagai symlink kenodejs
. Ada instruksi yang sangat dilihat untuk melakukan ini di sini di Stack Overflow, dan di seluruh web. Bahkan adanodejs-legacy
paket yang tujuan utamanya adalah membuat symlink ini untuk Anda. Orang yang menggunakan Node tahu cara memperbaiki masalah ini di Ubuntu, dan mereka harus melakukannya jika ingin menggunakan hampir semua perangkat lunak yang pernah ditulis di Node.apt-get install nodejs
dan itu dibuat/usr/bin/node
sebagai symlink ke/etc/alternatives/node
. Orang-orang yang terkena masalah ini, saya duga, adalah minoritas yang menyusut.Meskipun Anda menargetkan orang-orang yang buta huruf Node, Anda mungkin masih ingin menggunakan
#!/usr/bin/env node
, mungkin menambahkan kemungkinan kebutuhan untuk pembuatan symlink manual atau instalasinodejs-legacy
paket ke dokumentasi instalasi Anda jika Anda menganggapnya perlu. Perhatikan bahwa jika seseorang dengannodejs
tetapi tidaknode
tersedia mencoba menjalankan program Anda dengan shebang di atas, mereka akan melihat:dan Googling yang akan memberi mereka perbaikan di hasil pertama dan berkali-kali di halaman pertama.
Jika Anda benar-benar, sangat ingin memastikan bahwa pengguna dapat menjalankan perangkat lunak Anda pada sistem
nodejs
yang tersedia tetapinode
tidak tersedia (atau di mananode
sebenarnya ada program Node Radio Paket Amatir ), maka Anda dapat menggunakan "shebang dua baris" yang diambil dari Unix & Linux Stack Exchange :#!/bin/sh ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@" console.log('Hello world!');
tetapi apakah Anda benar-benar perlu melakukan ini ketika hampir tidak ada orang lain di dunia Node?
sumber
nodejs
eksekusi lebih disukai, Anda mungkin merasa sedikit lebih cantik menggunakan shebang dengan#!/bin/sh
dan//bin/false || exec "$(command -v nodejs || command -v node)" "$0"
.--experimental-modules
, jika Anda menggunakanenv
baris shebang ini . Ada peretasan, tapi itu jelek .