# node-loader

> A Node loader module for enhanced-require

Latest version **2.1.0** (published 2024-11-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install node-loader
pnpm add node-loader
yarn add node-loader
bun add node-loader
```

## Health

**Score 25/100 (F)** — status: maintenance-mode.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.1.0 |
| Published | 2024-11-13 |
| First published | 2013-02-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 10.13.0 |
| Dependencies | 1 |
| Unpacked size | 10 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 123 |
| Author | Tobias Koppers @sokra |
| Maintainers | evilebottnawi, sokra, jhnns |
| Keywords | webpack |

## Links

- npm: https://www.npmjs.com/package/node-loader
- Repository: https://github.com/webpack-contrib/node-loader
- Issues: https://github.com/webpack-contrib/node-loader/issues
- Funding: https://opencollective.com/webpack
- npm.io page: https://npm.io/package/node-loader

## Dependencies (1)

- [loader-utils](https://npm.io/package/loader-utils.md) ^2.0.3

## Alternatives

- [raw-loader](https://npm.io/package/raw-loader.md) — 4.3M weekly downloads
- [plop](https://npm.io/package/plop.md) — 1.4M weekly downloads
- [webpack-deadcode-plugin](https://npm.io/package/webpack-deadcode-plugin.md) — 80.3K weekly downloads
- [@storybook/preact-vite](https://npm.io/package/@storybook/preact-vite.md) — 54.2K weekly downloads
- [vite-plugin-transform](https://npm.io/package/vite-plugin-transform.md) — 2.4K weekly downloads

## Recent versions

- 2.1.0 (latest) — 2024-11-13
- 2.0.0 — 2021-04-05
- 1.0.3 — 2021-04-05
- 1.0.2 — 2020-10-09
- 1.0.1 — 2020-07-28
- 1.0.0 — 2020-06-26
- 0.6.0 — 2016-09-14
- 0.5.0 — 2013-02-15

## README

<div align="center">
  <a href="https://github.com/webpack/webpack">
    <img width="200" height="200" src="https://webpack.js.org/assets/icon-square-big.svg">
  </a>
</div>

[![npm][npm]][npm-url]
[![node][node]][node-url]
[![tests][tests]][tests-url]
[![coverage][cover]][cover-url]
[![discussion][discussion]][discussion-url]
[![size][size]][size-url]

# node-loader

A [Node.js add-ons](https://nodejs.org/dist/latest/docs/api/addons.html) loader.

Allows to connect native node modules with `.node` extension.

> ⚠ `node-loader` only works on the `node`/`async-node`/`electron-main`/`electron-renderer`/`electron-preload` targets.

## Getting Started

To begin, you'll need to install `node-loader`:

```console
npm install node-loader --save-dev
```

or

```console
yarn add -D node-loader
```

or

```console
pnpm add -D node-loader
```

Setup the `target` option to `node`/`async-node`/`electron-main`/`electron-renderer`/`electron-preload` value and do not mock the `__dirname` global variable.

**webpack.config.js**

```js
module.exports = {
  resolve: {
    extensions: ["...", ".node"],
  },
  target: "node",
  node: {
    __dirname: false,
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        loader: "node-loader",
      },
    ],
  },
};
```

### Inline

**index.js**

```js
import node from "node-loader!./file.node";
```

And run `webpack` via your preferred method.

### Configuration

**index.js**

```js
import node from "file.node";
```

Then add the loader to your `webpack` config. For example:

**webpack.config.js**

```js
module.exports = {
  target: "node",
  node: {
    __dirname: false,
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        loader: "node-loader",
      },
    ],
  },
};
```

And run `webpack` via your preferred method.

## Options

|         Name          |         Type         |         Default         | Description                                                  |
| :-------------------: | :------------------: | :---------------------: | :----------------------------------------------------------- |
| **[`flags`](#flags)** |      `{Number}`      |       `undefined`       | Enables/Disables `url`/`image-set` functions handling        |
|  **[`name`](#name)**  | `{String\|Function}` | `'[contenthash].[ext]'` | Specifies a custom filename template for the target file(s). |

### `flags`

Type: `Number`
Default: `undefined`

The `flags` argument is an integer that allows to specify dlopen behavior.
See the [`process.dlopen`](https://nodejs.org/api/process.html#process_process_dlopen_module_filename_flags) documentation for details.

**index.js**

```js
import node from "file.node";
```

**webpack.config.js**

```js
const os = require("os");

module.exports = {
  target: "node",
  node: {
    __dirname: false,
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        loader: "node-loader",
        options: {
          flags: os.constants.dlopen.RTLD_NOW,
        },
      },
    ],
  },
};
```

### `name`

Type: `String|Function`
Default: `'[contenthash].[ext]'`

Specifies a custom filename template for the target file(s).

#### `String`

**webpack.config.js**

```js
module.exports = {
  target: "node",
  node: {
    __dirname: false,
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        loader: "node-loader",
        options: {
          name: "[path][name].[ext]",
        },
      },
    ],
  },
};
```

#### `Function`

**webpack.config.js**

```js
module.exports = {
  target: "node",
  node: {
    __dirname: false,
  },
  module: {
    rules: [
      {
        test: /\.node$/,
        loader: "node-loader",
        options: {
          name(resourcePath, resourceQuery) {
            // `resourcePath` - `/absolute/path/to/file.js`
            // `resourceQuery` - `?foo=bar`

            if (process.env.NODE_ENV === "development") {
              return "[path][name].[ext]";
            }

            return "[contenthash].[ext]";
          },
        },
      },
    ],
  },
};
```

## Contributing

Please take a moment to read our contributing guidelines if you haven't yet done so.

[CONTRIBUTING](./.github/CONTRIBUTING.md)

## License

[MIT](./LICENSE)

[npm]: https://img.shields.io/npm/v/node-loader.svg
[npm-url]: https://npmjs.com/package/node-loader
[node]: https://img.shields.io/node/v/node-loader.svg
[node-url]: https://nodejs.org
[tests]: https://github.com/webpack-contrib/node-loader/workflows/node-loader/badge.svg
[tests-url]: https://github.com/webpack-contrib/node-loader/actions
[cover]: https://codecov.io/gh/webpack-contrib/node-loader/branch/master/graph/badge.svg
[cover-url]: https://codecov.io/gh/webpack-contrib/node-loader
[discussion]: https://img.shields.io/github/discussions/webpack/webpack
[discussion-url]: https://github.com/webpack/webpack/discussions
[size]: https://packagephobia.now.sh/badge?p=node-loader
[size-url]: https://packagephobia.now.sh/result?p=node-loader

---
_Source: https://npm.io/package/node-loader · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
