2015-09-12 2 views
1

Я использую библиотеку js-xlsx для создания файла Excel в JavaScript.Как включить jszip с requirejs: jszip не определен

Эта библиотека использует jszip. Я пытался определить jszip библиотеку в моем файле JavaScript перед загрузкой jszip но jszip никогда не определяется:

Uncaught TypeError: jszip is not a function 

Config requirejs:

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

Вот как я использую его в моем файле JS:

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

ответ

-1

Если вы откроете xlsx.js, вы увидите, что существует глобальная переменная с именем JSZip и фактически заполняет значение jszip. Так что если вы измените определение функции как этот

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

он должен работать, я думаю,

+0

код вы показать здесь не функционально отличается от кода I есть в моем ответе. Первым аргументом для обратного вызова для определения может быть 'jszip',' JSZip', 'potato',' flalalalalala' или что угодно. – Louis

9

JSZip (и ODS для поддержки ODS расширения) должны быть загружены и присоединены к окну перед загрузкой XLSX. Я получаю это работает, используя подкладку с обычаем "XLSX-погрузчик":

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

Спасибо за это. Должен быть отмечен как ответ наверняка! Вы не только решили проблему, но сделали ее «правильно» с помощью манипулятора и xlsx-загрузчика. – Martyn

+1

'window.JSZip = jszip;' сделал трюк для меня, спасибо –

-1

Вы должны определить Lib вар как имя конструктора.

Для моего случая я был один и тот же вопрос:

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

и я изменил jszip к JSZip как это:

define("Statistics", ["jquery", "underscore", "Datatable", "moment", "jszip"], function($, _, Datatable, moment, JSZip) { 
Смежные вопросы