Rollup构建时如何仅引入指定node_modules模块并排除其余第三方依赖
解决方案
可用配置参考
import path from 'path'; import commonjs from '@rollup/plugin-commonjs'; import { nodeResolve } from '@rollup/plugin-node-resolve'; export default { input: "dist/tmp/index.js", output: { file: "dist/umd/index.js", format: 'umd', name: 'Foo', globals: { '@tensorflow/tfjs': 'tf', } }, context: 'window', // 显式外置tfjs external: ['@tensorflow/tfjs'], plugins: [ nodeResolve({ // 仅允许解析tensor-as-base64模块,其余node_modules依赖全部自动外置 resolveOnly: ['tensor-as-base64'], // monorepo场景下填写node_modules所在的根目录绝对路径 rootDir: path.resolve(__dirname, '../../'), }), commonjs({ // 同时匹配临时构建目录的源码和目标模块文件,避免解析卡住 include: [ path.resolve(__dirname, 'dist/tmp/**'), /node_modules\/tensor-as-base64/ ], // 低版本commonjs插件需手动指定命名导出,v21+版本可删除该项 namedExports: { [path.resolve(__dirname, '../../node_modules/tensor-as-base64/dist/index.js')]: ['tensorAsBase64'], } }) ] };
关键规则说明
resolveOnly配置直接限定仅打包指定的tensor-as-base64模块,其余所有node_modules下的依赖不会被打入产物,完全匹配需求。- 显式指定
rootDir适配monorepo架构,避免插件找不到上层目录的node_modules依赖。 commonjs.include同时覆盖源码临时目录和目标第三方模块,解决因未匹配到需要转译的CommonJS文件导致的进程卡死问题。- 路径配置需根据你实际的monorepo目录层级调整,确保能正确定位到根目录的node_modules文件夹。
内容的提问来源于stack exchange,提问作者thekevinscott
相关产品推荐
相关产品推荐

