如何在requirejs中包含jszip:未定义jszip

时间:2015-09-12 12:52:17

标签: javascript excel requirejs xlsx js-xlsx

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

此库使用jszip。在加载jszip之前,我尝试在JavaScript文件中定义jszip库,但从未定义jszip

Uncaught TypeError: jszip is not a function

配置requirejs:

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

以下是我在JS文件中使用它的方法:

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

3 个答案:

答案 0 :(得分:9)

在加载XLSX之前,必须加载JSZip(以及支持ods扩展的ODS)并将其附加到窗口。 我正在使用带有自定义“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)您也可以实现此链接要求,它不需要任何填充程序但不能与优化程序

一起使用
require(['jszip', 'ods'], function (jszip, ods) {
    window.JSZip = jszip;
    window.ODS = ods;
    require(['xlsx'], function () {
        // Do what you want with XLSX
        ...
    });
});

答案 1 :(得分:-1)

如果你打开xlsx.js,你会看到有一个名为JSZip的全局变量,它实际上填充了jszip的值。所以,如果你像这样改变你的功能定义

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

它应该有效,我想

答案 2 :(得分:-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) {