如何在本机 nodejs 插件中使用环境变量作为编译时常量?

How can I use environment variable as compile-time constant in native nodejs addon?

我正在为 NodeJS 编写本机插件。如何在编译时将环境变量用作常量?也就是说,"inject" 从 node-gyp buildnpm install 期间设置的环境变量到 NodeJS C++ 插件的常量。我找到了 this answer,但是据我所知,没有将变量传递给 node-gyp

的等效选项

通常当您自己创建 Makefile 时,您可以将选项传递给编译器,例如:

-D name=definition

这相当于在源代码中有这个:

#define name "definition"

所以使用:

-D NAME=$NAME

会将 NAME 环境变量作为 NAME 常量放入已编译的源代码中。

但是 node-gyp 会为您生成 Makefile,请参阅:

您可能需要在 运行:

之后更改生成的 Makefile
node-gyp configure

但在你之前 运行:

node-gyp build

或者您可以制作一个简单的库,其全部目的是定义一个给定的值,供您的 Node 插件使用。

另一种选择是使用一个脚本来执行如下操作:

echo "#define NAME \"$NAME\"" > config.h

然后您可以通过您的 Node 本机插件或任何其他用 C 或 C++ 编写的代码包含 config.h 文件。

我发现 binding.gyp 中的 defines 块和变量扩展将实现我所追求的目标:

{
  "targets": [
    {
      "target_name": "targetName",
      "sources": [ "source.cc" ],
      "defines": [
        'MY_DEFINE="<!(echo $MY_ENV_VAR)"'
      ]
    }
  ]
}

然后 MY_DEFINE 可用,其值等于编译时设置的任何 MY_ENV_VAR