You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Rollup打包为独立ES模块?自打包遇报错求解

能否将Rollup打包为独立ES模块?

需求说明

我需要把Rollup打包成独立ES模块,以便集成到基于vercel/pkg构建的CLI应用中。期望的使用方式如下:

常规用法

import {rollup} from 'rollup';

const result = await rollup();

打包后期望用法

import defaultExport from './bundled-rollup.js';

const result = await defaultExport();

尝试实现的代码

我编写了source.js作为打包入口:

// source.js

import { rollup } from 'rollup';

// 定义输入选项
const opts_input_obj = {
  context: 'globalThis',
  treeshake: true,
};

// 定义输出选项
const opts_output_obj = {
  format: 'es',
};

// 创建打包产物
const bundle_obj = await rollup(opts_input_obj);

// 生成输出内容
const bundle_output_obj = await bundle_obj.generate(opts_output_obj);

console.log(bundle_output_obj);

执行的Rollup命令:

npx rollup  --input="./source.js" --config="./rollup.config.js" --file="./bundle.js"

遇到的错误

配置一:仅使用@rollup/plugin-node-resolve

使用以下配置文件时:

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

export default {
  context: 'globalThis',
  treeshake: true,
  plugins: [
    nodeResolve({
      preferBuiltins: true,
    })
  ],
};

出现报错:

[!] RollupError: ../../../../../../node_modules/rollup/dist/es/shared/parseAst.js (10:9): "parse" is not exported by "../../../../../../node_modules/rollup/dist/native.js", imported by "../../../../../../node_modules/rollup/dist/es/shared/parseAst.js".
../../../../../../node_modules/rollup/dist/es/shared/parseAst.js (10:9)
 8:   Released under the MIT License.
 9: */
10: import { parse, parseAsync } from '../../native.js';
             ^
11: import { resolve, basename, extname, dirname } from 'node:path';
    at getRollupError (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/parseAst.js:282:41)
    at Object.error (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/parseAst.js:278:42)
    at Module.error (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:15122:28)
    at Module.traceVariable (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:15570:29)
    at ModuleScope.findVariable (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:13258:39)
    at ReturnValueScope.findVariable (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:7480:38)
    at FunctionBodyScope.findVariable (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:7480:38)
    at Identifier.bind (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:8752:40)
    at CallExpression.bind (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:6208:23)
    at CallExpression.bind (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:10416:15)

配置二:添加@rollup/plugin-commonjs

加入commonjs插件后,配置文件如下:

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

export default {
  context: 'globalThis',
  treeshake: true,
  plugins: [
    nodeResolve({
      preferBuiltins: true,
    }),
    commonjs()
  ],
};

出现报错:

[!] (plugin commonjs--resolver) RollupError: ../../../../../../node_modules/fsevents/fsevents.node (1:0): Unexpected character '�' (Note that you need plugins to import files that are not JavaScript)
../../../../../../node_modules/fsevents/fsevents.node (1:0)
1: ����@�
         @��...
   ^
2: 
3: 
   *
    h���/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFound...
RollupError: Unexpected character '�'
    at Object.getRollupError (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/parseAst.js:282:41)
    at ParseError.initialise (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:12611:40)
    at convertNode (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:14356:10)
    at convertProgram (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:13673:12)
    at Module.setSource (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:15510:24)
    at ModuleLoader.addModuleSource (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:19805:13)
  [cause] RollupError: Unexpected character '�'
      at Object.getRollupError (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/parseAst.js:282:41)
      at ParseError.initialise (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:12611:40)
      at convertNode (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:14356:10)
      at convertProgram (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:13673:12)
      at Module.setSource (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:15510:24)
      at ModuleLoader.addModuleSource (/Users/obihill/My/Projects/Business/0_meta/1_monofab/3_dev/node_modules/rollup/dist/shared/rollup.js:19805:13)

问题

能否将Rollup打包为独立ES模块?


内容的提问来源于stack exchange,提问作者ObiHill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:14:58