本文得到了 ChatGPT 提供的专业建议和技术支持,特此致谢。
在上一篇文章《在LWC中如何使用ExcelJS》中介绍了如何在LWC中引入并使用ExcelJS。但是挖了一个坑,就是为什么在LoadScript之前要添加如下两句
var regeneratorRuntime = undefined; window.regeneratorRuntime = regeneratorRuntime;
首先,ExcelJS由于要大量操作与渲染数据,为了避免页面经常卡死,所以使用了regenerator-runtime库以便更容易的进行异步操作。
就是说ExcelJS依赖regenerator-runtime库。
然后,ExcelJS在加载时会判断当前运行上下文中使用有变量regeneratorRuntime存在。如果没有找到该变量,ExcelJS会认为当前运行环境默认支持regenertor-runtime。不过LWC运行环境并不支持regenertor-runtime所以导致报错。
但是,如果我们手动的定义一个全局变量regeneratorRuntime,则相当于告诉ExcelJS,不要尝试使用运行环境的regenertor-runtime,去使用全局变量定义的regenertor-runtime。
但是又由于我们定义的regenertor-runtime为undefined,则迫使ExcelJS放弃全局变量定义的regenertor-runtime,转而使用自己准备的regenertor-runtime以保证自己可以成功加载与运行。
以下流程图由ChatGPT生成(请点击View Source查看)
+----------------------+ | | | Load ExcelJS into | | Lightning Web | | Component (LWC) | | | +----------+-----------+ | +---------+---------+ | | | ExcelJS checks | | for | | regeneratorRuntime| | | +---------+---------+ | +---------------+---------------+ | | +-----v-----+ +---------+---------+ | | | | | regeneratorRuntime found | ExcelJS uses | | | |native JS generator| +-----+-----+ +---------+---------+ | | +-------+-------+ | | | | +-----------v---+ +-------v---+ +-------v------+ | | | | | | | Define | | Define | |ExcelJS reports| | regenerator- | | regenerator- | error | | Runtime as | | Runtime as | | | undefined | | function() | | | | | {return;}; | | +-------+-------+ +-------------+ +-------+------+ | +-----------------+ | | | | | ExcelJS executes | | | successfully | | | | +-------------------------------+-----------------+