【问题标题】:RequireJS configuration with modules that have no AMD supportRequireJS 配置不支持 AMD 的模块
【发布时间】:2017-02-08 00:41:30
【问题描述】:

所以我正在尝试阅读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-functions 介于两者之间,但我无法在窗口内找到正确的命名空间。还尝试在路径之前切换填充顺序,尝试使用“默认”而不是“切换”以及其他一些技巧,但它似乎无法正确导入它,因为它卡在未定义状态。

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

【问题讨论】:

    标签: javascript requirejs amd shim requirejs-define


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 2016-06-28
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多