我一直在尝试在Windows7上构建Node.js的Oracle客户端oracledb
。当我运行npm install oracledb
时,我看到大量错误,例如:
fatal error C1083: Cannot open include file: 'oci.h'
fatal error C1083: Cannot open include file: 'oratypes.h'
以及类似unrecognizable template declaration/definition
和syntax error : 'using'
的错误消息。
我一直在尝试构建oracledb客户端,主要使用Node.js 5.8.0,但我也尝试过旧版本,结果相同。我的python版本是2.7.9。我已经安装了最新的Microsoft Visual Studio 2015学习版,以及Oracle InstantClient 12.1(也是最新的),但在运行npm install oracledb
时,我仍然会收到来自node-gyp
构建过程的编译器错误页面。
这不是我在构建NPM模块时遇到的第一个问题,而且我在过去(2010、2012、2013)安装过Visual Studio的旧版本。我也试过卸载它们,但我不相信它们真的完全卸载了。
为Node.js构建oracledb
需要遵循的大部分指令可以在这里找到。但我将总结关键点,并指出造成所有差异的额外知识。
首先,您需要将Oracle InstantClient和SDK安装到同一文件夹中。也许最简单的方法是,重命名并移动该文件夹,使其成为c:oracleinstantclient
。您可以从Oracle网站获得基本的InstantClient和SDK。如果您使用64位Node.js,请确保下载64位版本;如果您使用32位Node.js.请确保下载32位版本。
如果您没有将InstantClient安装到c:oracleinstantclient
中,那么您需要执行下一步操作。将以下环境变量添加到系统中:
set OCI_LIB_DIR=C:my-path-to-instantclient-heresdklibmsvc
set OCI_INC_DIR=C:my-path-to-instantclient-heresdkinclude
上面的命令可以粘贴到命令提示符中以临时设置值,但您必须进入"控制面板">"系统">"高级">"环境变量",以创建具有与您的安装匹配的正确路径的新变量。
确保Node.js、Oracle InstantClient文件夹和Python都在系统的PATH
环境变量中。
接下来下载并安装Visual Studio Express 2015 for Desktop。
确保它也在您的PATH
中。
这是拯救我的诀窍:如果您有多个版本的Visual Studio集,您需要告诉node-gyp
要使用哪一个(在本例中为2015)。要做到这一点,你可以选择。
1) 您可以创建一个名为GYP_MSVS_VERSION
的环境变量,并将其值设置为2015
。
2) 您也可以在NPM
命令行上传递2015值,如下所示:
npm install oracledb --save --msvs_version=2015
或者,我认为这是最好的方法,您可以使用以下命令设置node-gyp
应全局使用的Visual Studio版本:
npm config set msvs_version 2015 --global
然后,您可以执行npm config list
来验证配置更改是否生效。
在这一点上,您应该能够执行一个常规的旧npm install --save oracledb
命令,并在您喜欢的任何项目中安装和构建它。其他编译后的NPM模块现在也应该构建得很好。