node-loader

npm node deps tests coverage chat size

处理 Node.js 插件(add-ons) 的 loader。

允许使用 .node 拓展名与原生 node module 相关联。

node-loader 只对 node/electron-main/electron-main/electron-renderer/electron-preload 生效。

快速开始

首先,你需要安装 node-loader

npm install node-loader --save-dev

设置 target 配置项为 node/async-node/electron-main/electron-renderer/electron-preload,并且需禁用 __dirname 全局变量。

webpack.config.js

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

内联

index.js

import node from 'node-loader!./file.node';

然后通过你喜欢的方式运行 webpack

配置

index.js

import node from 'file.node';

然后在你的 webpack 配置中添加该 loader。例如:

webpack.config.js

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

然后通过你喜欢的方式运行 webpack

选项

NameTypeDefaultDescription
flags{Number}undefined启用/禁用 url/image-set 函数处理
name{String|Function}'[contenthash].[ext]'指定一个或多个目标文件的自定义文件名模板。

flags

类型:Number 默认值:undefined

flags 参数是一个允许指定 dlopen 行为的整数。 请查阅 process.dlopen 文档了解更多。

index.js

import node from 'file.node';

webpack.config.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

类型:String|Function 默认值:'[contenthash].[ext]'

指定一个或多个目标文件的自定义文件名模板。

String

webpack.config.js

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

Function

webpack.config.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]';
          },
        },
      },
    ],
  },
};

贡献

如果你还未阅读贡献指南,请抽时间进行阅读。

贡献指南

License

MIT

2 位译者