Troopers
Troopers

Reputation: 5452

How to set as external all node modules in rollup?

I want to have all modules imported from node_modules as external. What is the configuration for this?

I tried without success :

import path from "path";
import glob from "glob";
import multiEntry from "rollup-plugin-multi-entry";

export default {
    entry: "src/**/*.js",
    format: "cjs",
    plugins: [
        multiEntry()
    ],
    external: glob.sync("node_modules/**/*.js").map(file => path.resolve(file)),
    dest: "dist/bundle.js"
}];

or

import multiEntry from "rollup-plugin-multi-entry";

export default {
    entry: "src/**/*.js",
    format: "cjs",
    plugins: [
        multiEntry()
    ],
    external: id => id.indexOf("node_modules") !== -1,
    dest: "dist/bundle.js"
}];

Upvotes: 11

Views: 13575

Answers (5)

Mir-Ismaili
Mir-Ismaili

Reputation: 16928

UPDATE:

Use rollup-plugin-auto-external.


Thank @IsidroTorregrosa for his answer (and @maxkueng too). I improved it by adding node built-in modules (like fs and path) and also peerDependencies. Use:

import builtins from 'builtin-modules/static'
const pkg = require('./package.json')
// ...
export default {
    external: builtins.concat(Object.keys(pkg.dependencies || {})).concat(Object.keys(pkg.peerDependencies || {})),
    // ...
}

See builtin-modules on npmjs.com and also see:

https://github.com/rollup/rollup-plugin-node-resolve#resolving-built-ins-like-fs UPDATE:

Use:

import { builtinModules as builtins } from 'node:module'

See: https://nodejs.org/api/module.html#modulebuiltinmodules

Upvotes: 3

Thomas
Thomas

Reputation: 1473

The following worked for me

external: id => !(path.isAbsolute(id) || id.startsWith("."));

Source: https://github.com/rollup/rollup-plugin-node-resolve/issues/110#issuecomment-350353632

Upvotes: 0

Konstantin Tarkus
Konstantin Tarkus

Reputation: 38358

Rollup Configuration
import pkg from "./package.json";

/**
 * Rollup bundler configuration.
 *
 * @see https://rollupjs.org/
 * @type {import("rollup").RollupOptions}
 */
export default {
  ...
  external: [...Object.keys(pkg.dependencies), /^node:/]
}
Application Source Code
import path from "node:path";
import fs from "node:fs/promises";

...

Source: GraphQL API and Relay Starter Kitapi/rollup.config.js

Upvotes: 2

Eric Cirone
Eric Cirone

Reputation: 191

Using rollup 2.63 this works for me

export default {
    // ...
    external: [/node_modules/],
    // ...
}

Upvotes: 16

Isidrok
Isidrok

Reputation: 2181

You can accomplish that using package.json dependencies field:

const pkg = require('./package.json');

export default {
    // ...
    external : Object.keys(pkg.dependencies),
    // ...
}

Upvotes: 8

Related Questions