node-gyp - Node.js 本地外掛構建工具
node-gyp
- Node.js 本地外掛構建工具
翻譯自:nodejs/node-gyp:Node.js native addon build tool
node-gyp
是用Node.js編寫的跨平臺命令列工具,用於為Node.js編譯本機附加模組。它包含gyp-next
專案的供應商副本,該副本以前由Chromium團隊使用,已擴充套件用來支援Node.js本機外掛的開發。
請注意,node-gyp
並不用於構建Node.js本身。
支援Node.js的多個目標版本(0.8
,...,4
、5
、6
等),無需顧及系統安裝的版本(node-gyp
會下載目標版本所需的開發檔案或標頭檔案)。
特性
- 各個受支援平臺都使用相同的構建命令執行
- 支援不同的Node.js目標版本
安裝
你可以使用npm
安裝node-gyp
:
npm install -g node-gyp
根據你的作業系統,你需要安裝:
在Unix上
- Python v2.7, v3.5, v3.6, v3.7, or v3.8
make
- 一個合適的C/C++編譯器工具鏈,像GCC
在macOS上
注意:如果你的Mac升級到macOS Catalina(10.15),請閱讀macOS_Catalina.md.。
- Python v2.7, v3.5, v3.6, v3.7, or v3.8
- Xcode
- 你需要通過執行
xcode-select --install
來安裝XCode Command Line Tools
Xcode -> Open Developer Tool -> More Developer Tools...
(Xcode -> 開啟開發者工具 -> 更多開發者工具...)下找到它們。此步驟將安裝clang
,clang++
和make
。
- 你需要通過執行
在Windows上
從Microsoft Store軟體包中安裝最新版本的Python。
選項1
通過提升許可權的PowerShell或CMD.exe(以管理員執行)來使用微軟的windows-build-tools安裝所有必需的工具和配置。
npm install --global --production windows-build-tools
選項2
安裝工具並手動配置
-
安裝 Visual C++ 構建環境:Visual Studio Build Tools(使用“Visual C++ 構建工具”工作負載)或 Visual Studio 2017 Community(使用“C++桌面開發”工作負載)
-
啟動
cmd
,npm config set msvs_version 2017
如果上述步驟對你沒用,請訪問微軟的Windows Node.js指南以獲取其他提示。
以本地 ARM 上的 Windows 10 上的 ARM64 Node.js 為目標,請新增“ARM64的Visuall C++ 編譯器和庫”和“ARM64的 Visual C++ ATL”元件。
配置 Python 依賴項
node-gyp
要求你安裝以下其中一個相容的Python版本: v2.7, v3.5, v3.6, v3.7, or v3.8。如果你安裝了多個Python版本,你可以用以下方式之一確定一個node-gyp
可以使用的Python版本
- 通過設定
--python
命令列選項,例如:
node-gyp <command> --python /path/to/executable/python
- 如果用
npm
的方式呼叫node-gyp
,並且你安裝了多個版本的Python,那麼你可以設定npm
的'python'配置鍵為適當的值。
npm config set python /path/to/executable/python
- 如果
PYTHON
環境變數設定到一個Python可執行檔案的路徑,那麼該版本將被使用,如果它是一個相容的版本。 - 如果
NODE_GYP_FORCE_PYTHON
環境變數設定到一個Python可執行檔案,它將被使用,作為所有其他已配置或內建Python搜尋路徑的代替。如果不是相容版本,將不會完成進一步的搜尋。
如何使用
要編譯本地附加模組,首先轉到它的根目錄:
cd my_node_addon
下一步是為當前平臺生成合適的專案構建檔案。為此使用下列命令:
node-gyp configure
對Visual C++ Build Tools 2015自動偵測失敗,所以需要新增--msvs_version=2015
(用npm執行如上配置時不需要):
node-gyp configure --msvs_version=2015
注:configure
這一步尋找了在當前目錄的binding.gyp
檔案去處理。往下看以獲取建立binding.gyp
的指示。
現在你將會有Makefile
(在Unix平臺上)或者是在build/
目錄中的vcxproj
檔案(在Windows上)。接下來,呼叫build
命令:
node-gyp build
現在你有了你的已編譯的.node
捆綁檔案!已編譯的捆綁檔案以build/Debug/
還是以build/Release/
結束,取決於構建模式。至此,您可以使用帶有Node.js的.node
檔案並執行測試!
注:建立捆綁檔案的除錯版本,當執行configure
,build
,或者rebuild
命令時經過--debug
(或者-d
)開關。(通過--debug
/-d
開關執行configure
,build
,或者rebuild
命令?)
binding.gyp
檔案
binding.gyp
檔案以類似於JSON的格式描述了構建模組的配置。這個檔案和package.json
都在包的根目錄下。
一個適用於構建Node.js外掛的準gyp檔案應該長這樣:
{
"targets": [
{
"target_name": "binding",
"sources": [ "src/binding.cc" ]
}
]
}
延伸閱讀
一些Node.js本地外掛和編寫gyp
配置檔案的補充資源:
- "Going Native" a nodeschool.io tutorial
- "Hello World" node addon example
- gyp user documentation
- gyp input format reference
- "binding.gyp" files out in the wild wiki page
Commands(命令)
node-gyp
響應以下命令:
命令 | 描述 |
---|---|
help |
顯示幫助日誌 |
build |
呼叫make /msbuild.exe 並且構建本地外掛 |
clean |
刪除build 目錄,如果存在 |
configure |
為當前平臺生成專案構建檔案 |
rebuild |
連續執行clean ,configure 和build |
install |
為給定版本安裝Node.js標頭檔案 |
list |
列出當前已安裝的Node.js頭版本 |
remove |
為給定版本移除Node.js標頭檔案 |
Command Options(命令項)
node-gyp
接受以下命令選項:
命令 | 描述 |
---|---|
-j n ,--jobs n |
並行執行make 。max 值將使用所有可用的CPU核心 |
--target=v6.2.1 |
要為其構建的Node.js版本(預設為process.version ) |
--silly ,--loglevel=silly |
記錄所有進度到控制檯 |
--verbose ,--loglevel=verbose |
記錄大部分進度到控制檯 |
--silent ,--loglevel=silent |
不記錄任何東西進行控制檯 |
debug ,--debug |
進行除錯構建(預設為Release ) |
--release , --no-debug |
製作釋出版本 |
-C $dir , --directory=$dir |
在不同的目錄執行命令 |
--make=$make |
覆蓋make 命令(e.g. gmake) |
--thin=yes |
啟用精簡資料庫 |
--arch=$arch |
設定目標架構(例如ia32) |
--tarball=$path |
從本地壓縮包獲取標頭 |
--devdir=$path |
SDK下載目錄(預設是作業系統快取目錄) |
--ensure |
如果已經存在,不重灌標頭檔案 |
-dist-url=$url |
從自定義網址下載標題壓縮包 |
--proxy=$url |
設定HTTP(S)代理以下載標頭壓縮包 |
--noproxy=$urls |
設定網址以在下載標頭壓縮包時忽略代理 |
--cafile=$cafile |
覆蓋預設的CA鏈(下載壓縮包) |
--nodedir=$path |
設定節點原始碼的路徑 |
--python=$path |
設定Python二進位制檔案的路徑 |
--msvs_version=$version |
設定Visual Studio版本(僅Windows) |
--solution=$solution |
配置
環境變數
將格式npm_config_OPTION_NAME
用於上面列出的任何命令選項(選項名稱中的短劃線應替換為下劃線)。
例如,例如,要將devdir
設定為/tmp/.gyp
,您將:
在Unix上執行:
export npm_config_devdir=/tmp/.gyp
或者在Windows上執行:
set npm_config_devdir=c:\temp\.gyp
npm
配置
將格式OPTION_NAME
用於上面列出的任何命令選項。
例如,要將devdir
設定為/tmp/.gyp
,可以執行:
npm config set [--global] devdir /tmp/.gyp
注:通過npm
設定的配置僅在當node-gyp
通過npm
執行時使用,不是直接執行node-gyp
。
證書
node-gyp
在MIT證書下可用。詳情見證書檔案