RequireJS配置包含没有AMD支持的模块

时间:2016-09-29 15:35:00

标签: javascript requirejs amd shim requirejs-define

所以我试着阅读Require JS API -documentation来弄清楚应该如何正确地完成这项工作,但我还是无法加载库,所以它不能定义为未定义。我通过NPM-WebJars使用它,但我想你应该如何定义它。

基本上,我试图在我的项目中使用the react-bootstrap-switch -library。这是JavaScript-file source in Pastebin,因为它可能会在主分支中发生变化。 react-bootstrap-switch使用exports.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函数进入,但我无法在窗口中找到正确的命名空间。还尝试在路径之前切换匀场的顺序,尝试默认&#39;而不是&#39; Switch&#39;以及其他一些技巧,但它似乎没有正确导入它,因为它被卡在未定义的位置。

我可以尝试的最后一件事是在本地获取代码并更改为其他内容而不是exports.default,或者仅为此编写我自己的函数,但我希望将其用于将来的参考。

1 个答案:

答案 0 :(得分:1)

很明显,您要加载的是一个已编译的文件,用于定位CommonJS环境。 RequireJS无法按原样加载此类文件。

您至少要在开始时将代码包装在define(function (require, exports, module) {中,最后将});包裹起来。一旦你这样做,可能工作。您可以使用r.js进行换行或任何其他工具。