Oracle oracledb NPM 模块不会使用 node-gyp 和 Windows 构建



我一直在尝试在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/definitionsyntax 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模块现在也应该构建得很好。

最新更新