我想将从 node_modules 导入的所有模块作为外部模块。 这是什么配置?
我尝试过但没有成功:
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"
}];
或
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"
}];
使用 rollup 2.63 这对我有用
export default {
// ...
external: [/node_modules/],
// ...
}
您可以使用 package.json 依赖项字段来完成此操作:
const pkg = require('./package.json');
export default {
// ...
external : Object.keys(pkg.dependencies),
// ...
}
更新:
使用rollup-plugin-auto-external。
感谢@IsidroTorregrosa的他的回答(当然还有@maxkueng)。我通过添加节点内置模块(如
fs
和 path
)以及 peerDependencies
来改进它。用途:
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 || {})),
// ...
}
请参阅 npmjs.com 上的 builtin-modules,另请参阅:
https://github.com/rollup/rollup-plugin-node-resolve#resolving-built-ins-like-fs
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";
...
api/rollup.config.js
以下对我有用
external: id => !(path.isAbsolute(id) || id.startsWith("."));
来源:https://github.com/rollup/rollup-plugin-node-resolve/issues/110#issuecomment-350353632