#!/usr/bin/env node 到底是什么


#!/usr/bin/env node 到底是什么?

上一篇文章中給大家介紹了開發npm包的過程,這篇文章來分享一下我在開發npm包中遇到的問題。第一個問題就是#!/usr/bin/env node到底是什么?(如果我的理解有錯誤,歡迎各位大神指點)

在開發npm包的時候,再將包link到你的項目之后,運行包發現報錯了。

 

 

 

去Google查找了一下,發現解決方法是需要在你的bin文件的上面增加一行  #!/usr/bin/env node。這句話有什么作用呢?介紹它之前需要先介紹一個知識點。

 

Shebang

若是有使用過Linux或者Unix的前端開發者,對於Shebang應該不陌生,它是一個符號的名稱,#!。這個符號通常在Unix系統的基本中第一行開頭中出現,用於指明這個腳本文件的解釋程序。了解了Shebang之后就可以理解,增加這一行是為了指定用node執行腳本文件。

當你輸入一個命令的時候,npm是如何識別並執行對應的文件的呢?具體的原理阮一峰大神已經在npm scripts 使用指南中介紹過。簡單的理解,就是輸入命令后,會有在一個新建的shell中執行指定的腳本,在執行這個腳本的時候,我們需要來指定這個腳本的解釋程序是node。

在一些情況下,即使你增加了這一行,但還是可能會碰到一下錯誤,這是為什么呢?

No such file or directory

為了解決這個問題,首先需要了解一下/usr/bin/env。我們已經知道,Shebang是為了指定腳本的解釋程序,可是不同用戶或者不同的腳本解釋器有可能安裝在不同的目錄下,系統如何知道要去哪里找你的解釋程序呢? /usr/bin/env就是告訴系統可以在PATH目錄中查找。 所以配置#!/usr/bin/env node, 就是解決了不同的用戶node路徑不同的問題,可以讓系統動態的去查找node來執行你的腳本文件。

看到這里你應該理解,為什么會出現No such file or directory的錯誤?因為你的node安裝路徑沒有添加到系統的PATH中。所以去進行node環境變量配置就可以了。

要是你只是想簡單的測試一下,那么你可以通過which node命令來找到你本地的node安裝路徑,將/usr/bin/env改為你查找到的node路徑即可。

最后需要說明的一點是,windows不支持Shebang,它是通過文件的擴展名來確定使用什么解釋器來執行腳本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM