env node 到底是什麼

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

nodejs中的#!/usr/bin/env node 到底是什麼

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

Shebang

Shebang 的名字來自於 SHArp 和 bang,或 haSH bang 的縮寫,指代 Shebang 中 #! 兩個符號的典型 Unix 名稱。 Unix 術語中,井號通常稱為 sharp,hash 或 mesh;而歎號則常常稱為 bang。也有看法認為,shebang 名字中的 sh 來自於默認shell Bourne shell 的名稱,sh,因為常常使用 shebang 調用之。

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

當你輸入一個命令的時候,npm是如何識別並執行對應的文件的呢?具體的原理阮一峰大神已經在npm>

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

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


分享到:


相關文章: