process.dlopen(module, filename[, flags])


require() 主要用于加载 C++ 插件,除非特殊情况,否则不应直接使用。

flags 参数是整数,允许指定 dlopen 行为。 有关详细信息,请参阅 os.constants.dlopen 文档。

在此示例中,假定常量可用。

const os = require('os');
process.dlopen(module, require.resolve('binding'),
               os.constants.dlopen.RTLD_NOW);
module.exports.foo();

The process.dlopen() method allows to dynamically load shared objects. It is primarily used by require() to load C++ Addons, and should not be used directly, except in special cases. In other words, require() should be preferred over process.dlopen(), unless there are specific reasons.

The flags argument is an integer that allows to specify dlopen behavior. See the os.constants.dlopen documentation for details.

If there are specific reasons to use process.dlopen() (for instance, to specify dlopen flags), it's often useful to use require.resolve() to look up the module's path.

An important drawback when calling process.dlopen() is that the module instance must be passed. Functions exported by the C++ Addon will be accessible via module.exports.

The example below shows how to load a C++ Addon, named as binding, that exports a foo function. All the symbols will be loaded before the call returns, by passing the RTLD_NOW constant. In this example the constant is assumed to be available.

const os = require('os');
process.dlopen(module, require.resolve('binding'),
               os.constants.dlopen.RTLD_NOW);
module.exports.foo();