阅读(3150) (0)

Webpack node-loader

2023-05-20 17:35:57 更新

处理 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。

选项

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

flags

类型:​Number​ 默认值:undefined

flags 参数是一个允许指定 dlopen 行为的整数。 [https://nodejs.org/api/process.html#process_process_dlopen_module_filename_flags] 文档了解更多。

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