翻譯自:nodejs/node-gyp:Node.js native addon build tool
node-gyp - Node.js 本地插件構建工具
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 命令行工具)。或者,你已經安裝了完整的Xcode,你可以在菜單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證書下可用。詳情見證書文件
