Reputation: 5452
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
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
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
Reputation: 38358
import pkg from "./package.json";
/**
* Rollup bundler configuration.
*
* @see https://rollupjs.org/
* @type {import("rollup").RollupOptions}
*/
export default {
...
external: [...Object.keys(pkg.dependencies), /^node:/]
}
import path from "node:path";
import fs from "node:fs/promises";
...
Source: GraphQL API and Relay Starter Kit → api/rollup.config.js
Upvotes: 2
Reputation: 191
Using rollup 2.63 this works for me
export default {
// ...
external: [/node_modules/],
// ...
}
Upvotes: 16
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