Rollup.js will not include the node module discord-rpc in the bundle. Is there anyway to do this?

2.9k Views Asked by At

I'm only importing discord-rpc and only have main.ts. Also using rollup plugins typscript and node-resolve.

main.ts import:

const { Client } = require("discord-rpc");

package.json scripts and dependencies:

{
  "main": "main.js",
  "scripts": {
    "dev": "rollup --config rollup.config.js -w",
    "build": "rollup --config rollup.config.js"
  },
  "devDependencies": {
    "@rollup/plugin-commonjs": "^15.1.0",
    "@rollup/plugin-json": "^4.1.0",
    "@rollup/plugin-node-resolve": "^9.0.0",
    "@rollup/plugin-typescript": "^6.0.0",
    "@types/node": "^14.14.2",
    "obsidian": "https://github.com/obsidianmd/obsidian-api/tarball/master",
    "rollup": "^2.32.1",
    "tslib": "^2.0.3",
    "typescript": "^4.0.3"
  },
  "dependencies": {
    "discord-rpc": "^3.1.4"
  }
}

rollup.config.js:

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

export default {
  input: [
    'main.ts',
  ],
  output: {
    dir: '.',
    sourcemap: 'inline',
    format: 'cjs',
    exports: 'default'
  },
  external: ['obsidian', 'electron'],
  plugins: [
    typescript(),
    commonjs(),
    nodeResolve({browser: true}),
  ]
};

Do I need to use an alternative to rollup.js?

Edit: I tried changing const { Client } = require("discord-rpc"); to import { Client } from "discord-rpc"; but I still get Error: Cannot find module 'discord-rpc'

Edit 2: Keeping this change:

import { Client } from "discord-rpc";

I edited rollup.config.js:

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

export default {
  input: [
    'main.ts',
  ],
  output: {
    dir: '.',
    sourcemap: 'inline',
    format: 'cjs',
    exports: 'default'
  },
  external: ['obsidian', 'electron'],
  plugins: [
    nodeResolve({browser: true}), // Moving this up.
    typescript(),
    commonjs(),
  ]
};

No longer get this Error in runtime:

Error: Cannot find module 'discord-rpc'

But I get this during build:

(!) Unresolved dependencies
https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
timers (imported by node_modules/discord-rpc/src/client.js, timers?commonjs-external)
events (imported by node_modules/discord-rpc/src/client.js, events?commonjs-external, node_modules/discord-rpc/src/transports/ipc.js, node_modules/discord-rpc/src/transports/websocket.js)

It also doesn't work as expect but I'm not sure if that's due to my code or rollup...

1

There are 1 best solutions below

0
On BEST ANSWER

Ok so I solved the problem!

I had to move a few things around: rollup.config.js:

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

export default {
  input: [
    'main.ts',
  ],
  output: {
    dir: '.',
    sourcemap: 'inline',
    format: 'cjs',
    exports: 'default'
  },
  external: ['obsidian', 'electron', 'net', 'events', 'timers'],
  plugins: [
    nodeResolve({browser: true, preferBuiltins: false}),
    typescript(),
    commonjs(),
  ]
};

package.json:

{
  "dependencies": {
    "@types/discord-rpc": "^3.0.4",
    "discord-rpc": "^3.1.4"
  }
}

main.ts import:

import { Client } from "discord-rpc";