2016-09-29 19 views
1

Итак, я пытаюсь прочитать Require JS API -documentation, чтобы выяснить, как это должно быть сделано правильно, но мне не удалось загрузить библиотеку, чтобы она не определялась как неопределенная , Я использую это через NPM-WebJars, хотя, думаю, не имеет значения, как вы его определяете.Конфигурация RequireJS с модулями, не поддерживающими AMD

В принципе, я пытаюсь использовать the react-bootstrap-switch -library, работающий в моем проекте. Вот JavaScript-file source in Pastebin, поскольку он может измениться в главной ветви. response-bootstrap-switch определяет библиотеку с export.default = Switch. У меня есть несколько других модулей, определенных с помощью RequireJS, которые поддерживают AMD и работают.

Вот как я использую RequireJS

requirejs.config("paths":{"react-bootstrap-switch":["@routes.WebJarAssets.at("react-bootstrap-switch/15.0.0/dist/js/index")"]}}); // the file location 

с использованием библиотеки

define(['react', 'react-bootstrap-switch'], function(React, Switch){ 
    console.log(Switch); // <- undefined 
} 

Так с только стандартной requirejs.config -import это не работает, потому что отсутствие поддержки AMD. Поэтому я предполагаю, что я должен использовать прокладку, но как мне это сделать? Я читал в нем немного, но я не могу правильно импортировать библиотеку, используя ее. Вероятно, это должно быть что-то довольно простое, но, похоже, оно не работает. Например,

requirejs.config({ 
      "paths":{"react-bootstrap-switch":["@routes.WebJarAssets.at("react-bootstrap-switch/15.0.0/dist/js/index")"]}, 
      "shim": { 
        "react-bootstrap-switch": { 
          exports: 'Switch' 
         }}}); 

оставляет его неопределенным. Я пытаюсь войти в промежуток между init-функциями, но я не могу найти правильное пространство имен внутри окна. Также попытался переключить порядок shimming перед путями, пытаясь «по умолчанию» вместо «Switch» и некоторые другие трюки, но он просто не импортирует его должным образом, поскольку он застрял до неопределенного.

Последнее, что я мог бы попытаться сделать, это получить код локально и изменить что-то другое вместо export.default или просто запрограммировать мою собственную функцию для этого, но я хотел бы, чтобы эта работа работала для дальнейшего использования.

ответ

1

Понятно, что вы пытаетесь загрузить, это файл, который был переполнен и предназначался для среды CommonJS. Такие файлы не могут быть загружены как есть с помощью RequireJS.

Вы должны как минимум обернуть свой код в define(function (require, exports, module) { в начале и }); в конце. Как только вы это сделаете, это может работы. Вы можете использовать r.js, чтобы сделать упаковку или любой другой инструмент.