duckdb / duckdb-node

MIT License
57 stars 27 forks source link

Unable to build using rollup #115

Open ehassaan opened 2 months ago

ehassaan commented 2 months ago

I am trying to build duckdb based nodejs project using rollup but I get unresolved dependencies error for libraries,

mock-aws-s3, aws-sdk, and nock

Same issue described here, mapbox/node-pre-gyp#661

When adding these dependencies in my package.json, I get below error at runtime,

Activating extension 'ducklake.ducklab' failed: ducklab package.json is not node-pre-gyp ready:
package.json must declare these properties: 
binary.

Below is my rollup config,

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

const config = [
    {
        plugins: [
            del({ targets: 'dist/*' }),
            typescript(),
            json(),
            commonjs(),
            nodeResolve(),
        ],
        external: [
            "vscode",
        ],
        input: 'src/index.ts',
        output: {
            file: 'dist/index.cjs',
            format: 'cjs',
        },
    },
] as RollupOptions;
export default config;
ehassaan commented 3 weeks ago

Workaround:

Added dependencies even though I hate it,

    "aws-sdk": "^2.1685.0",
    "mock-aws-s3": "^4.0.2",
    "nock": "^13.5.5",
  1. Add "binary" clause in package.json
    "binary": {
    "module_name": "duckdb",
    "module_path": "./lib/binding/",
    "host": "https://npm.duckdb.org/duckdb"
    },
  2. Add pre-build step,
npx node-pre-gyp install --directory ./node_modules/duckdb --target_platform=$platform --target_arch=$arch --update-binary

New-Item -Force -ItemType Directory ./lib/binding
Copy-Item -Force -Recurse ./node_modules/duckdb/lib/binding/duckdb.node ./lib/binding/