本文得到了 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 |
| | |
+-------------------------------+-----------------+


