#!/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,它是通過文件的擴展名來確定使用什么解釋器來執行腳本。