File Explorer

/var/lang/lib/node_modules/npm/node_modules/node-gyp

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

4 dirs
12 files
README.md12.0 KB · 291 lines
# `node-gyp` - Node.js native addon build tool [![Build Status](https://github.com/nodejs/node-gyp/workflows/Tests/badge.svg?branch=main)](https://github.com/nodejs/node-gyp/actions?query=workflow%3ATests+branch%3Amain)![npm](https://img.shields.io/npm/dm/node-gyp) `node-gyp` is a cross-platform command-line tool written in Node.js forcompiling native addon modules for Node.js. It contains a vendored copy of the[gyp-next](https://github.com/nodejs/gyp-next) project that was previously usedby the Chromium team and extended to support the development of Node.js nativeaddons. Note that `node-gyp` is _not_ used to build Node.js itself. All current and LTS target versions of Node.js are supported. Depending on what version of Node.js is actually installed on your system`node-gyp` downloads the necessary development files or headers for the target version. List of stable Node.js versions can be found on [Node.js website](https://nodejs.org/en/about/previous-releases). ## Features  * The same build commands work on any of the supported platforms * Supports the targeting of different versions of Node.js ## Installation > [!Important]> Python >= v3.12 requires `node-gyp` >= v10 You can install `node-gyp` using `npm`: ``` bashnpm install -g node-gyp``` Depending on your operating system, you will need to install: ### On Unix    * [A supported version of Python](https://devguide.python.org/versions/)   * `make`   * A proper C/C++ compiler toolchain, like [GCC](https://gcc.gnu.org) ### On macOS    * [A supported version of Python](https://devguide.python.org/versions/)   * `Xcode Command Line Tools` which will install `clang`, `clang++`, and `make`.     * Install the `Xcode Command Line Tools` standalone by running `xcode-select --install`. -- OR --     * Alternatively, if you already have the [full Xcode installed](https://developer.apple.com/xcode/download/), you can install the Command Line Tools under the menu `Xcode -> Open Developer Tool -> More Developer Tools...`.  ### On Windows Install tools with [Chocolatey](https://chocolatey.org):``` bashchoco install python visualstudio2022-workload-vctools -y``` Or install and configure Python and Visual Studio tools manually:   * Follow the instructions in [Using Python on Windows](https://docs.python.org/3/using/windows.html) to install    the current [version of Python](https://www.python.org/downloads/).    * Install Visual C++ Build Environment: For Visual Studio 2019 or later, use the `Desktop development with C++` workload from [Visual Studio Community](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community).  For a version older than Visual Studio 2019, install [Visual Studio Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) with the `Visual C++ build tools` option.    To target native ARM64 Node.js on Windows on ARM, add the components "Visual C++ compilers and libraries for ARM64" and "Visual C++ ATL for ARM64".    To use the native ARM64 C++ compiler on Windows on ARM, ensure that you have Visual Studio 2022 [17.4 or later](https://devblogs.microsoft.com/visualstudio/arm64-visual-studio-is-officially-here/) installed. It's advised to install the following PowerShell module: [VSSetup](https://github.com/microsoft/vssetup.powershell) using `Install-Module VSSetup -Scope CurrentUser`.This will make Visual Studio detection logic use a more flexible and accessible method, avoiding PowerShell's `ConstrainedLanguage` mode. ### Configuring Python Dependency `node-gyp` requires that you have installed a [supported version of Python](https://devguide.python.org/versions/).If you have multiple versions of Python installed, you can identify which version`node-gyp` should use in one of the following ways: 1. by setting the `--python` command-line option, e.g.: ``` bashnode-gyp <command> --python /path/to/executable/python``` 2. If `node-gyp` is called by way of `npm`, *and* you have multiple versions ofPython installed, then you can set the `npm_config_python` environment variableto the appropriate path:``` bashexport npm_config_python=/path/to/executable/python```&nbsp;&nbsp;&nbsp;&nbsp;Or on Windows:```consolepy --list-paths  # To see the installed Python versionsset npm_config_python=C:\path\to\python.exe  # CMD$Env:npm_config_python="C:\path\to\python.exe"  # PowerShell``` 3. If the `PYTHON` environment variable is set to the path of a Python executable,then that version will be used if it is a supported version. 4. If the `NODE_GYP_FORCE_PYTHON` environment variable is set to the path of aPython executable, it will be used instead of any of the other configured orbuilt-in Python search paths. If it's not a compatible version, no furthersearching will be done. ### Build for Third Party Node.js Runtimes When building modules for third-party Node.js runtimes like Electron, which havedifferent build configurations from the official Node.js distribution, youshould use `--dist-url` or `--nodedir` flags to specify the headers of theruntime to build for. Also when `--dist-url` or `--nodedir` flags are passed, node-gyp will use the`config.gypi` shipped in the headers distribution to generate buildconfigurations, which is different from the default mode that would use the`process.config` object of the running Node.js instance. Some old versions of Electron shipped malformed `config.gypi` in their headersdistributions, and you might need to pass `--force-process-config` to node-gypto work around configuration errors. ## How to Use To compile your native addon first go to its root directory: ``` bashcd my_node_addon``` The next step is to generate the appropriate project build files for the currentplatform. Use `configure` for that: ``` bashnode-gyp configure``` Auto-detection fails for Visual C++ Build Tools 2015, so `--msvs_version=2015`needs to be added (not needed when run by npm as configured above):``` bashnode-gyp configure --msvs_version=2015``` __Note__: The `configure` step looks for a `binding.gyp` file in the currentdirectory to process. See below for instructions on creating a `binding.gyp` file. Now you will have either a `Makefile` (on Unix platforms) or a `vcxproj` file(on Windows) in the `build/` directory. Next, invoke the `build` command: ``` bashnode-gyp build``` Now you have your compiled `.node` bindings file! The compiled bindings end upin `build/Debug/` or `build/Release/`, depending on the build mode. At this point,you can require the `.node` file with Node.js and run your tests! __Note:__ To create a _Debug_ build of the bindings file, pass the `--debug` (or`-d`) switch when running either the `configure`, `build` or `rebuild` commands. ## The `binding.gyp` file A `binding.gyp` file describes the configuration to build your module, in aJSON-like format. This file gets placed in the root of your package, alongside`package.json`. A barebones `gyp` file appropriate for building a Node.js addon could look like: ```python{  "targets": [    {      "target_name": "binding",      "sources": [ "src/binding.cc" ]    }  ]}``` ## Further reading The **[docs](./docs/)** directory contains additional documentation on specific node-gyp topics that may be useful if you are experiencing problems installing or building addons using node-gyp. Some additional resources for Node.js native addons and writing `gyp` configuration files:  * ["Going Native" a nodeschool.io tutorial](http://nodeschool.io/#goingnative) * ["Hello World" node addon example](https://github.com/nodejs/node/tree/main/test/addons/hello-world) * [gyp user documentation](https://gyp.gsrc.io/docs/UserDocumentation.md) * [gyp input format reference](https://gyp.gsrc.io/docs/InputFormatReference.md) * [*"binding.gyp" files out in the wild* wiki page](./docs/binding.gyp-files-in-the-wild.md) ## Commands `node-gyp` responds to the following commands: | **Command**   | **Description**|:--------------|:---------------------------------------------------------------| `help`        | Shows the help dialog| `build`       | Invokes `make`/`msbuild.exe` and builds the native addon| `clean`       | Removes the `build` directory if it exists| `configure`   | Generates project build files for the current platform| `rebuild`     | Runs `clean`, `configure` and `build` all in a row| `install`     | Installs Node.js header files for the given version| `list`        | Lists the currently installed Node.js header versions| `remove`      | Removes the Node.js header files for the given version  ## Command Options `node-gyp` accepts the following command options: | **Command**                       | **Description**|:----------------------------------|:------------------------------------------| `-j n`, `--jobs n`                | Run `make` in parallel. The value `max` will use all available CPU cores| `--target=v6.2.1`                 | Node.js version to build for (default is `process.version`)| `--silly`, `--loglevel=silly`     | Log all progress to console| `--verbose`, `--loglevel=verbose` | Log most progress to console| `--silent`, `--loglevel=silent`   | Don't log anything to console| `debug`, `--debug`                | Make Debug build (default is `Release`)| `--release`, `--no-debug`         | Make Release build| `-C $dir`, `--directory=$dir`     | Run command in different directory| `--make=$make`                    | Override `make` command (e.g. `gmake`)| `--thin=yes`                      | Enable thin static libraries| `--arch=$arch`                    | Set target architecture (e.g. ia32)| `--tarball=$path`                 | Get headers from a local tarball| `--devdir=$path`                  | SDK download directory (default is OS cache directory)| `--ensure`                        | Don't reinstall headers if already present| `--dist-url=$url`                 | Download header tarball from custom URL| `--proxy=$url`                    | Set HTTP(S) proxy for downloading header tarball| `--noproxy=$urls`                 | Set urls to ignore proxies when downloading header tarball| `--cafile=$cafile`                | Override default CA chain (to download tarball)| `--nodedir=$path`                 | Set the path to the node source code| `--python=$path`                  | Set path to the Python binary| `--msvs_version=$version`         | Set Visual Studio version (Windows only)| `--solution=$solution`            | Set Visual Studio Solution version (Windows only)| `--force-process-config`          | Force using runtime's `process.config` object to generate `config.gypi` file ## Configuration ### package.json Use the `config` object in your package.json with each key in the form `node_gyp_OPTION_NAME`. Any of the commandoptions listed above can be set (dashes in option names should be replaced by underscores). For example, to set `devdir` equal to `/tmp/.gyp`, your package.json would contain this: ```json{  "config": {    "node_gyp_devdir": "/tmp/.gyp"  }}``` ### Environment variables Use the form `npm_package_config_node_gyp_OPTION_NAME` for any of the command options listedabove (dashes in option names should be replaced by underscores). For example, to set `devdir` equal to `/tmp/.gyp`, you would: Run this on Unix: ```bashexport npm_package_config_node_gyp_devdir=/tmp/.gyp``` Or this on Windows: ```consoleset npm_package_config_node_gyp_devdir=c:\temp\.gyp``` Note that in versions of npm before v11 it was possible to use the prefix `npm_config_` forenvironment variables. This was deprecated in npm@11 and will be removed in npm@12 so itis recommended to convert your environment variables to the above format. ### `npm` configuration for npm versions before v9 Use the form `OPTION_NAME` for any of the command options listed above. For example, to set `devdir` equal to `/tmp/.gyp`, you would run: ```bashnpm config set [--global] devdir /tmp/.gyp``` **Note:** Configuration set via `npm` will only be used when `node-gyp`is run via `npm`, not when `node-gyp` is run directly. ## License `node-gyp` is available under the MIT license. See the [LICENSEfile](LICENSE) for details.