node-gyp---Node.js的原生外掛構建工具
寫成日期:2021/10/08 10:00 AM
原文地址:https://github.com/nodejs/node-gyp
node-gyp Node.js的原生外掛構建工具
我是一個跨平臺的命令列工具,在Node.js中使用,用於為Node.js編譯原生外掛模組。我包含了一個gyp-next的分叉(gyp-next之前由Chromium在使用),擴充套件用於支援Node.js原生外掛的開發。
吭吭,我不是用於構建Node.js自身的工具。
我支援Node.js的很多很多版本,從0.8到4、5、6...,嗯嗯截止目前我都支援,放心使用。
我提供的功能
-
在已經支援的任意平臺上,使用同一種構建命令。
-
相容Node.js的不同版本
我如何安裝
可以直接用 npm 進行安裝:npm install -g node-gyp
根據我將執行的作業系統,還需要安裝以下東西:
在Unix上
-
Python v3.6+
-
make
-
C/C++編譯工具鏈,如GCC
在macOS上
如果系統升到了macOS Catalina(10.15+),需要單獨看 macOS_Catalina.md。
-
Python v3.6+
-
Xcode
-
需要安裝XCode命令列工具,
xcode-select --install
-
如果已經安裝了完整的Xcode,要通過選單 Xcode -> Open Developer Tool -> More Developer Tools,進行clang、clang++、make的安裝
-
在Windows上
TODO
配置Python依賴
TODO
如何食用
第一步,進到需要編譯的原生外掛目錄下,cd my_node_addon
第二步,生成一個適合當前系統平臺的專案編譯檔案,node-gyp configure
。在VC++2015上自動檢測失敗,需要手動新增指定,node-gyp configure --msvs_version=2015
。配置步驟會在當前目錄找到building.gyp檔案,如何配置它見下面。
現在,build目錄下會包含一個Makefile(在Unix上)或一個vcxproj(在Windows上)。
第三步,構建,node-gyp build
接下來會生成 .node 的繫結檔案,編譯後的繫結檔案在 build/Debug 或 build/Release/ 中,這取決於構建的模式。Debug使用 --debug引數,重新進行 configure、build/rebuild。
現在,你可以通過 require 這個 .node 檔案來執行你的測試了!
building.gyp 檔案
它描述了待編譯模組的配置,類JSON格式,它與package.json一塊兒放在包的根目錄下。
適用於構建Node.js外掛的gyp示例:
{
"targets": [
{
"target_name": "binding",
"sources": [ "src/binding.cc" ]
}
]
}
擴充套件閱讀
docs目錄下包含一些額外的文件,描述了一些關於node-gyp的特定主題,可能對你進行安裝或構建產生幫助。
一些非官方的寫的不錯的教程:
我有哪些命令
-
help,顯示幫助文件
-
build,使用make/msbuild.exe構建原生外掛
-
clean,移除build資料夾
-
configure,生成適配當前平臺的專案構建檔案
-
rebuild,執行clean、configure、build
-
install,安裝給定版本的Node.js標頭檔案
-
list,列出當前安裝的Node.js標頭檔案的版本
-
remove,移除給定版本的Node.js標頭檔案
命令可選引數
-
-j n, --jobs n
,並行執行make,取決於最大系統核心數 -
--target=v6.2.1
,指定Node.js版本,預設使用process.version -
--silly, --longlevel=silly
,列印所有進度到控制檯 -
--verbose, --loglevel=verbose
,列印大多數進度到控制檯 -
--silent, --loglevel=silent
,不列印任何東西 -
debug, --dbueg
,使用Debug構建,預設是Release -
-C $dir, --directory=$dir
,在不同的資料夾中跑命令 -
--make=$make
,重寫make命令,比如gmake -
--thin=yes
,使用精簡靜態庫 -
--arch=$arch
,設定目標架構,如 ia32 -
--tarball=$path
,從本地tarball獲取標頭檔案 -
--devdir=$path
,SDK下載目錄,預設使用OS快取目錄 -
--ensure
,如果標頭檔案已經存在則不重新安裝 -
--dist-url=$url
,從自定義URL中下載標頭檔案 -
--proxy=$url
,設定HTTP(S)代理,用於下載header tarball -
--noproxy=$urls
,設定下載header tarball時需要忽略代理的URLs -
--cafile=$cafile
,重寫預設的CA chain,用於下載header tarball -
--nodedir=$path
,設定node原始碼的路徑 -
--python=$path
,設定Python二進位制的路徑 -
--msvs_version=$version
,設定Visual Studio版本(Windows專用) -
--solution=$solution
,設定Visual Studio Solution版本(Windows專用)
配置
環境變數
舉例,將 devdir 設定為 /tmp/.gyp,
export npm_config_devdir=/tmp/.gyp
或 set npm_config_devdir=c:\temp\.gyp
npm配置
舉例,將 devdir 設定為 /tmp/.gyp,
npm config set [--global] devdir /tmp/.gyp
許可證
MIT