1

因此,我正在尝试阅读Require JS API -documentation以了解如何正确完成此操作,但我无法加载库,因此它不会被定义为未定义。我通过 NPM-WebJars 使用它,但我想你如何定义它并不重要。

基本上,我正在尝试在我的项目中使用react-bootstrap-switch -library 。这是Pastebin 中的 JavaScript 文件源,因为它可能会在主分支中更改。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-functions 介于两者之间,但我无法在窗口内找到正确的命名空间。还尝试在路径之前切换填充顺序,尝试“默认”而不是“切换”以及其他一些技巧,但它似乎无法正确导入它,因为它卡在未定义状态。

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

4

1 回答 1

1

很明显,您要加载的是一个文件,该文件已被转译并具有针对 CommonJS 环境的目标。RequireJS 无法按原样加载此类文件。

您至少需要define(function (require, exports, module) {在开始和});结束时包装它的代码。一旦你这样做,它可能会起作用。您可以使用r.js包装或任何其他工具。

于 2016-09-29T16:15:52.177 回答