https://blog.csdn.net/adley_app/article/details/95165584
GYP是一種構建自動化工具。
node-gyp:node下的gyp。
為什么要有node-gyp?
npm 為了方便干脆就直接源碼分發,用戶裝的時候再現場編譯。
因為node程序中需要調用一些其他語言編寫的 工具 甚至是dll,需要先編譯一下,否則就會有跨平台的問題,例如在windows上運行的軟件copy到mac上就不能用了,但是如果源碼支持,編譯一下,在mac上還是可以用的。node-gyp在較新的Node版本中都是自帶的(平台相關),用來編譯原生C++模塊。
配置是否正常
win + r cmd 控制台得到如下信息即可,注意安裝 MSBuild (2015)工具鏈。
C:\Users\Juwan>node-gyp list
gyp info it worked if it ends with ok
gyp info using node-gyp@6.1.0
gyp info using node@10.13.0 | win32 | ia32
10.13.0
gyp info ok
如何使用
node-gyp rebuild 在 Windows 下可以理解為調用 msbuid 進行該文件夾下的 sln 解決方案的 build ,例如我們在使用 serialport 的時候,經常要對 C++ 的代碼進行本機編譯得到 DLL 。
如下例子:
PS C:\Users\Juwan\Documents\GitHub\electron-vue-admin> cd node_modules\@serialport\bindings
PS C:\Users\Juwan\Documents\GitHub\electron-vue-admin\node_modules\@serialport\bindings> node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using node-gyp@6.1.0
gyp info using node@10.13.0 | win32 | ia32
gyp info find Python using Python version 2.7.17 found at "C:\Python27\python.exe"
gyp info find VS using VS2019 (16.2.29306.81) found at:
gyp info find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise"
gyp info find VS run with --verbose for detailed information
gyp info spawn C:\Python27\python.exe
gyp info spawn args [ 'C:\\Users\\Juwan\\AppData\\Roaming\\nvm\\v10.13.0\\node_modules\\node-gyp\\gyp\\gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'msvs',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\Juwan\\Documents\\GitHub\\electron-vue-admin\\node_modules\\@serialport\\bindings\\build\\config.gypi',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\Juwan\\AppData\\Roaming\\nvm\\v10.13.0\\node_modules\\node-gyp\\addon.gypi',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\Juwan\\AppData\\Local\\node-gyp\\Cache\\10.13.0\\include\\node\\common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=C:\\Users\\Juwan\\AppData\\Local\\node-gyp\\Cache\\10.13.0',
gyp info spawn args '-Dnode_gyp_dir=C:\\Users\\Juwan\\AppData\\Roaming\\nvm\\v10.13.0\\node_modules\\node-gyp',
gyp info spawn args '-Dnode_lib_file=C:\\\\Users\\\\Juwan\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\10.13.0\\\\<(target_arch)\\\\node.lib',
gyp info spawn args '-Dmodule_root_dir=C:\\Users\\Juwan\\Documents\\GitHub\\electron-vue-admin\\node_modules\\@serialport\\bindings',
gyp info spawn args '-Dnode_engine=v8',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'C:\\Users\\Juwan\\Documents\\GitHub\\electron-vue-admin\\node_modules\\@serialport\\bindings\\build',
gyp info spawn args '-Goutput_dir=.' ]
gyp info spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe
gyp info spawn args [ 'build/binding.sln',
gyp info spawn args '/clp:Verbosity=minimal',
gyp info spawn args '/nologo',
gyp info spawn args '/p:Configuration=Release;Platform=Win32' ]
在此解決方案中一次生成一個項目。若要啟用並行生成,請添加“-m”開關。
serialport.cpp
serialport_win.cpp
win_delay_load_hook.cc
正在創建庫 C:\Users\Juwan\Documents\GitHub\electron-vue-admin\node_modules\@serialport\bindings\build\Release\bindings.lib 和對象 C:\Users\Juwan\Documents\GitHub\electron-vue-admin\node_
modules\@serialport\bindings\build\Release\bindings.exp
正在生成代碼
Previous IPDB not found, fall back to full compilation.
All 478 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
已完成代碼的生成
bindings.vcxproj -> C:\Users\Juwan\Documents\GitHub\electron-vue-admin\node_modules\@serialport\bindings\build\Release\\bindings.node
gyp info ok
PS C:\Users\Juwan\Documents\GitHub\electron-vue-admin\node_modules\@serialport\bindings>
常見錯誤
關聯 Error: A dynamic link library (DLL) initialization routine failed.