node.js - «نمیتوان بهطور پویا 'binding.node' را نیازمند کرد» هنگام تلاش برای رولآپ ماژول اسپیکر


من در حال تلاش برای استفاده از رولآپ برای بستهبندی ماژول بلندگو هستم.

زمانی که آن را ساخته و تلاش میکنم اجرا کنم، خطای زیر را دریافت میکنم:

خطا: نمیتوان بهطور پویا فایل "/path/to/Project/build/binding.node" را درخواست کرد. لطفاً گزینههای dynamicRequireTargets و/یا ignoreDynamicRequires افزونه @rollup/plugin-commonjs را بهطور مناسب برای اینکه این فراخوانی require کار کند، پیکربندی کنید.

از ساخت:

const os = require$$0__default$3["default"];
const debug = src.exports('speaker');
const binding = bindings.exports('binding'); // Error occurs here

من سعی کردهام مسیر و نسخهی آن را به dynamicRequireTargets اضافه کنم ولی موفق نشدهام. مسئله این است که هیچ پوشهی Project/build وجود ندارد، بنابراین مطمئن نیستم که آیا فقط در زمان ساخت وجود دارد یا اینکه مسیری جعلی است.

چطور میتوانم این را به درستی ساخته و اجرا کنم؟


مثال حداقلی قابل بازتولید

npm init
npm i --save speaker
src/index.ts
import * as Speaker from 'speaker';

console.log(Speaker);
rollup.config.ts
import * as fs from 'fs';
import path from 'path';
import executable from 'rollup-plugin-executable';

import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import typescript from '@rollup/plugin-typescript';

const incrementalDependencyLoader = {
  input: 'src/index.ts',
  output: {
    file:
      '/dist/' +
      require(path.join(process.cwd(), 'package.json')).name,
    // cjs translates to CommonJs which is supported by Node
    format: 'cjs',
    banner: '#!/usr/bin/env node\n',
  },
  plugins: [
    nodeResolve(),
    typescript({
      tsconfig: fs.existsSync(path.join(process.cwd(), './tsconfig.build.json'))
        ? './tsconfig.build.json'
        : './tsconfig.json',
    }),
    json(),
    commonjs({}),
    executable(),
  ],
  external: [],
};

// with using an array, we can create multiple bundled javascript files
export default [incrementalDependencyLoader];

tsconfig.json
{
  "compilerOptions": {
    "jsx": "preserve",
    "module": "esnext",
    "moduleResolution": "node",
    "target": "esnext",
    "lib": ["esnext"],
    "baseUrl": ".",
    "allowSyntheticDefaultImports": true
  }
}