0

我正在使用 dojo 进行客户端开发。整个项目是基于 Node 构建的,但是对于前端,我结合了 Dojo 的使用。我对使用 dojo 比较陌生,但到目前为止,我已经设法创建自己的自定义小部件并将它们显示在 html 页面上,而且问题相对较少。现在我正在尝试将外部 Node.js 库 { SheetJS } 的使用合并到一个 dojo 小部件中。我已经尝试了所有我能想到的让它工作,但似乎我尝试的每一个不同的事情都与之前的尝试不同。

我的文件结构如下:

My Project
   Public
      Dojo
         Dojo
         Dijit
         Dstore
         Templates

我尝试了以下方法:

  1. 在文件夹下添加从 GitHub 下载的完整 xlsx 文件public/dojo夹。然后我尝试执行以下操作:
define([
     "dojo/_base/declare",
     "xlsx/xlsx"
],
function (declare, xlsx) {
    // ... declare and other things ...
    /* Generate Workbook */
    console.log(xlsx); // prints: not-a-module
    var wb = xlsx.utils.book_new();
    var ws = xlsx.utils.aoa_to_sheet(tempArr);
    xlsx.utils.book_append_sheet(wb, ws, "SheetJS");

    /* Trigger Download with `writeFile` */
    xlsx.writeFile(wb, "SheetJS.csv", {compression:true});
});

我得到的错误是:

未捕获的类型错误:无法读取未定义的属性“book_new”

  1. 使用从 GitHub README 中获取的脚本标签:<script lang="javascript" src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script>
define([
     "dojo/_base/declare",
     "https://unpkg.com/xlsx/dist/xlsx.full.min.js"
],
function (declare) {
    // ... declare and other things ...
    /* Generate Workbook */
    console.log(XLSX); // prints: {}
    var xlsx = XLSX;
    var wb = xlsx.utils.book_new();
    var ws = xlsx.utils.aoa_to_sheet(tempArr);
    xlsx.utils.book_append_sheet(wb, ws, "SheetJS");

    /* Trigger Download with `writeFile` */
    xlsx.writeFile(wb, "SheetJS.csv", {compression:true});
});

这里的错误是:

未捕获的类型错误:无法读取未定义的属性“book_new”

  1. cd进入public/dojo/dojo/并执行npm install xlsx然后尝试执行以下操作:
define([
     "dojo/_base/declare",
     "dojo/node!xlsx"
],
function (declare, xlsx) {
    // ... declare and other things ...
    /* Generate Workbook */
    console.log(xlsx);
    var wb = xlsx.utils.book_new();
    var ws = xlsx.utils.aoa_to_sheet(tempArr);
    xlsx.utils.book_append_sheet(wb, ws, "SheetJS");

    /* Trigger Download with `writeFile` */
    xlsx.writeFile(wb, "SheetJS.csv", {compression:true});
});

我得到的错误是:

未捕获的错误:找不到 Node.js 要求

我想知道这个问题是否与 XLSX 库有关,当它试图找到XLSX.utils它时找不到我想要使用的工具?

欢迎所有想法。提前感谢您提供的任何帮助或想法。

4

1 回答 1

0

当您npm install xlsx将 xlsx 库安装在node_modules项目的文件夹中时。

我不完全确定您当前的项目结构,但应该从您的 Dojo 小部件中相对找到该项目。

例如:

define([
     "dojo/_base/declare",
     "./../node_modules/xlsx/xlsx.js"  //change it until it will be found
],
function (declare, xlsx) {
    console.log(xlsx);
    var wb = xlsx.utils.book_new();
    var ws = xlsx.utils.aoa_to_sheet(tempArr);
    xlsx.utils.book_append_sheet(wb, ws, "SheetJS");

    /* Trigger Download with `writeFile` */
    xlsx.writeFile(wb, "SheetJS.csv", {compression:true});
});
于 2019-06-19T18:58:43.590 回答