【问题标题】:How can I use environment variable as compile-time constant in native nodejs addon?如何在本机 nodejs 插件中使用环境变量作为编译时常量?
【发布时间】:2017-03-28 10:21:47
【问题描述】:

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

【问题讨论】:

  • 你不能。变量不是恒定的。您的问题在术语上体现了矛盾。
  • @EJP 我不是在问如何使变量成为常量(在术语上肯定是矛盾的),我是在问如何在编译时定义一个常量

标签: c++ node.js environment-variables node-gyp


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    通常,当您自己创建 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 文件。

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 2020-12-18
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多