能否将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
相关产品推荐
相关产品推荐

