1

我正在使用js-xlsx库在 JavaScript 中创建 Excel 文件。

这个库使用jszip. 我试图jszip在加载之前在我的 JavaScript 文件中定义库,jszip但从jszip未定义:

Uncaught TypeError: jszip is not a function

配置要求:

<script type="text/javascript">
  requirejs.config({
    paths : {
      jszip : '../tools/jszip'
    }
  });
</script>

这是我在 JS 文件中使用它的方式:

define(['jszip', '../tools/xlsx'], function(jszip, xlsx) {
  ...
}
4

3 回答 3

10

JSZip(和支持 ods 扩展的 ODS)必须在加载 XLSX 之前加载并附加到窗口。我正在使用带有自定义“xlsx-loader”的垫片来工作:

main.js

requirejs.config({
    paths: {
        ods: '...path to ods',
        jszip: '...path to jszip',
        xlsxloader: '...path to xlsx-loader',
        xlsx: '...path to xlsx'
    },
    shim: {
        xlsx: {
            exports: 'XLSX',
            deps: ['xlsxloader']
        }
    }
});

xlsx-loader.js

define(['jszip', 'ods'], function (jszip, ods) {
    "use strict";

    window.JSZip = jszip;
    window.ODS = ods;
});

你的 JS 文件

define(['xlsx'], function () {
    // Do what you want with XLSX
    ...

选项 2)您也可以实现此链接要求,它不需要任何 shim 但不适用于优化器

require(['jszip', 'ods'], function (jszip, ods) {
    window.JSZip = jszip;
    window.ODS = ods;
    require(['xlsx'], function () {
        // Do what you want with XLSX
        ...
    });
});
于 2016-01-05T17:09:51.280 回答
-1

如果您打开 xlsx.js,您会看到使用了一个名为 JSZip 的全局变量,它实际上填充了 jszip 的值。因此,如果您像这样更改函数定义

define(['jszip', '../tools/xlsx'], function(JSZip , xlsx) { 

它应该工作,我想

于 2015-10-01T13:40:06.500 回答
-1

您必须将 lib var 定义为构造函数的名称。

对于我的情况,我有同样的问题:

define("Statistics", ["jquery", "underscore", "Datatable", "moment", "jszip"], function($, _, Datatable, moment, jszip) {

将 jszip 更改为 JSZip,如下所示:

define("Statistics", ["jquery", "underscore", "Datatable", "moment", "jszip"], function($, _, Datatable, moment, JSZip) {
于 2017-07-14T07:41:29.427 回答