usr bin env node 到底是什麼

2022-09-14 12:39:10 字數 1152 閱讀 4766

在開發npm包的時候,再將包link到你的專案之後,執行包發現報錯了。

去google查詢了一下,發現解決方法是需要在你的bin檔案的上面增加一行#!/usr/bin/env node。這句話有什麼作用呢?介紹它之前需要先介紹乙個知識點。若是有使用過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,它是通過檔案的副檔名來確定使用什麼直譯器來執行指令碼。

google pk microsoft 到底誰更牛

google的創新力是被人們所公認的,如果與員工的奢侈腐敗聯絡起來,腦子裡很自然就會彈出乙個問題。企業應是創新後腐敗,還是以腐敗誕生創新。google很神秘嗎?當然。因為它讓整個地球都不再神秘。這個如日中天的網際網路搜尋巨頭內部的工作環境又是怎樣呢?google 美國總部 google 中國 goo...

PlaceHolder到底什麼

placeholder 是乙個佔位控制項,可以在裡面新增子控制項。這二者是用於母版技術的。contentplaceholder 用在母版頁中,表示這裡面的內容可以被 aspx 頁中的 content 內容替換,當然 aspx 頁也可以不理會它。content 就是用於 aspx 頁的,content...

size t到底多大

c語言中 size t一般用來表示一種計數,比如有多少東西被拷貝等。sizeof操作符的結果型別是size t,陣列大小也是size t型別。它在標頭檔案中typedef為unsigned int型別,即typedef unsigned int size t 該型別保證能容納實現所建立的最大物件的位...