如何在requirejs中包含jszip:jszip没有定义

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

这个库使用jszip 。 我试图在加载jszip之前在我的JavaScript文件中定义jszip库,但jszip永远不会被定义:

 Uncaught TypeError: jszip is not a function 

configurationrequirejs:

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

这里是我如何在我的JS文件中使用它:

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

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

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 ... }); }); 

如果你打开xlsx.js,你会看到有一个名为JSZip的全局variables被用来实际填充jszip的值。 所以如果你像这样改变你的函数定义

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

它应该工作,我认为

您必须将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) {