上一篇文章中給你們介紹了開發npm包的過程,這篇文章來分享一下我在開發npm包中遇到的問題。第一個問題就是#!/usr/bin/env node
究竟是什麼?(若是個人理解有錯誤,歡迎各位大神指點)html
在開發npm包的時候,再將包link到你的項目以後,運行包發現報錯了。前端
去Google查找了一下,發現解決方法是須要在你的bin文件的上面增長一行#!/usr/bin/env node
。這句話有什麼做用呢?介紹它以前須要先介紹一個知識點。
如果有使用過Linux或者Unix的前端開發者,對於Shebang應該不陌生,它是一個符號的名稱,#!
。這個符號一般在Unix系統的基本中第一行開頭中出現,用於指明這個腳本文件的解釋程序。瞭解了Shebang以後就能夠理解,增長這一行是爲了指定用node執行腳本文件。node
當你輸入一個命令的時候,npm是如何識別並執行對應的文件的呢?具體的原理阮一峯大神已經在npm scripts 使用指南中介紹過。簡單的理解,就是輸入命令後,會有在一個新建的shell中執行指定的腳本,在執行這個腳本的時候,咱們須要來指定這個腳本的解釋程序是node。shell
在一些狀況下,即便你增長了這一行,但仍是可能會碰到一下錯誤,這是爲何呢?npm
No such file or directory
複製代碼
爲了解決這個問題,首先須要瞭解一下/usr/bin/env
。咱們已經知道,Shebang是爲了指定腳本的解釋程序,但是不一樣用戶或者不一樣的腳本解釋器有可能安裝在不一樣的目錄下,系統如何知道要去哪裏找你的解釋程序呢? /usr/bin/env
就是告訴系統能夠在PATH目錄中查找。 因此配置#!/usr/bin/env node
, 就是解決了不一樣的用戶node路徑不一樣的問題,可讓系統動態的去查找node來執行你的腳本文件。windows
看到這裏你應該理解,爲何會出現No such file or directory
的錯誤?由於你的node安裝路徑沒有添加到系統的PATH中。因此去進行node環境變量配置就能夠了。測試
要是你只是想簡單的測試一下,那麼你能夠經過which node
命令來找到你本地的node安裝路徑,將/usr/bin/env
改成你查找到的node路徑便可。spa
最後須要說明的一點是,windows不支持Shebang,它是經過文件的擴展名來肯定使用什麼解釋器來執行腳本。code