1 | # node-gyp-build
|
2 |
|
3 | > Build tool and bindings loader for [`node-gyp`][node-gyp] that supports prebuilds.
|
4 |
|
5 | ```
|
6 | npm install node-gyp-build
|
7 | ```
|
8 |
|
9 | [![Test](https://github.com/prebuild/node-gyp-build/actions/workflows/test.yml/badge.svg)](https://github.com/prebuild/node-gyp-build/actions/workflows/test.yml)
|
10 |
|
11 | Use together with [`prebuildify`][prebuildify] to easily support prebuilds for your native modules.
|
12 |
|
13 | ## Usage
|
14 |
|
15 | > **Note.** Prebuild names have changed in [`prebuildify@3`][prebuildify] and `node-gyp-build@4`. Please see the documentation below.
|
16 |
|
17 | `node-gyp-build` works similar to [`node-gyp build`][node-gyp] except that it will check if a build or prebuild is present before rebuilding your project.
|
18 |
|
19 | It's main intended use is as an npm install script and bindings loader for native modules that bundle prebuilds using [`prebuildify`][prebuildify].
|
20 |
|
21 | First add `node-gyp-build` as an install script to your native project
|
22 |
|
23 | ``` js
|
24 | {
|
25 | ...
|
26 | "scripts": {
|
27 | "install": "node-gyp-build"
|
28 | }
|
29 | }
|
30 | ```
|
31 |
|
32 | Then in your `index.js`, instead of using the [`bindings`](https://www.npmjs.com/package/bindings) module use `node-gyp-build` to load your binding.
|
33 |
|
34 | ``` js
|
35 | var binding = require('node-gyp-build')(__dirname)
|
36 | ```
|
37 |
|
38 | If you do these two things and bundle prebuilds with [`prebuildify`][prebuildify] your native module will work for most platforms
|
39 | without having to compile on install time AND will work in both node and electron without the need to recompile between usage.
|
40 |
|
41 | Users can override `node-gyp-build` and force compiling by doing `npm install --build-from-source`.
|
42 |
|
43 | Prebuilds will be attempted loaded from `MODULE_PATH/prebuilds/...` and then next `EXEC_PATH/prebuilds/...` (the latter allowing use with `zeit/pkg`)
|
44 |
|
45 | ## Supported prebuild names
|
46 |
|
47 | If so desired you can bundle more specific flavors, for example `musl` builds to support Alpine, or targeting a numbered ARM architecture version.
|
48 |
|
49 | These prebuilds can be bundled in addition to generic prebuilds; `node-gyp-build` will try to find the most specific flavor first. Prebuild filenames are composed of _tags_. The runtime tag takes precedence, as does an `abi` tag over `napi`. For more details on tags, please see [`prebuildify`][prebuildify].
|
50 |
|
51 | Values for the `libc` and `armv` tags are auto-detected but can be overridden through the `LIBC` and `ARM_VERSION` environment variables, respectively.
|
52 |
|
53 | ## License
|
54 |
|
55 | MIT
|
56 |
|
57 | [prebuildify]: https://github.com/prebuild/prebuildify
|
58 | [node-gyp]: https://www.npmjs.com/package/node-gyp
|