尝试将外部节点库与Dojo一起使用

9avjhtql  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(106)

我使用dojo进行客户端开发,整个项目构建在Node上。但是对于前端,我正在整合Dojo的使用。我使用Dojo相对较新,但到目前为止,我已经成功地创建了自己的自定义小部件,并在html页面上显示它们,问题相对较少。现在,我正在尝试在Dojo小部件中整合外部Node.js库{SheetJS}的使用。我已经尝试了我能想到的一切让它工作,但似乎每一个不同的事情,我尝试我一些不同的错误比以前的尝试。
我的文件结构大致如下:

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自述文件中的script标签:<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时,它找不到我想要使用的实用程序?
欢迎所有的想法。提前感谢任何帮助或想法来我的方式。

zrfyljdw

zrfyljdw1#

当您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});
});
ih99xse1

ih99xse12#

我遇到你这种情况已经有几天了,Ferry的解决方案不起作用,好像跟SheetJS有关,那边解决的关于AMD/DOJO的罚单也不起作用。
您最好的选择是使用ExcelJS。在这种情况下,这是适合我的:

define([
'dojo/_base/declare', 
'jimu/BaseWidget',
'https://cdnjs.cloudflare.com/ajax/libs/exceljs/4.3.0/exceljs.min.js'
], function (declare, BaseWidget, ExcelJS) {
    return declare([BaseWidget], {
        baseClass: 'x-x-x',
        name: "x",
        className: 'xxx.xxxxxx.xxxx',

        postCreate: function () {

        },

        startup: function () {
            const workbook = new ExcelJS.Workbook();
            console.log(workbook);
        },
    });
});

相关问题