node.js - Electron: Συμπερίληψη δυαδικής εξάρτησης με το Webpack


Προσπαθώ να χρησιμοποιήσω το Webpack στο project μου με Electron για να δέσω τον κώδικα Typescript στη βασική διαδικασία μου (ο renderer είναι ένα project Angular που διαχειρίζεται με το CLI).

Αλλά στην κύρια διαδικασία μου έχω μια εξάρτηση από το registry-js:

import { enumerateValues, HKEY } from "registry-js";

Το Registry-js είναι φτιαγμένο για ένα .node-binary. Οπότε η ερώτησή μου είναι πώς μπορώ να το συμπεριλάβω στο bundle μου; Προς το παρόν το webpack.config.js μου φαίνεται έτσι:

const path = require("path");

module.exports = {
  entry: "./main.ts",
  target: "electron-main",
  output: {
    path: "./dist-main",
    filename: "main.bundle.js",
  },
  mode: "production",
  module: {
    rules: [
      {
        test: /\.ts?$/,
        use: "ts-loader",
        exclude: /node_modules/,
      }
    ],
  },
  resolve: {
    extensions: [".ts", ".js"],
    alias: {
      "registry-js": path.join(__dirname, "node_modules/registry-js/build/Release/registry.node"),
    }
  }
};

Όταν ξεκινώ την εφαρμογή μου, παίρνω ένα TypeError: Cannot read property 'HKEY_LOCAL_MACHINE' of undefined

Τι μπορώ να κάνω για να συμπεριλάβω το δυαδικό αρχείο στην κατασκευή του Webpack ώστε να μπορώ να τρέξω την εφαρμογή μου σε λειτουργία ανάπτυξης και ως παραγωγική κατασκευή;

Απάντηση #1

Το Webpack δεν μπορεί να δεσμεύσει εγγενή πρόσθετα modules. Θα πρέπει να χρησιμοποιήσετε τον κατάλληλο φορτωτή όπως το node-loader ή node-addon-loader και να αντιγράψετε τα δυαδικά αρχεία κατά τη δημιουργία του πακέτου.