Возникли проблемы с импортом в AMD cytoscape-context-menu "Uncaught TypeError: contextMenus не является функцией" - PullRequest
2 голосов
/ 14 мая 2019

Я новичок в программировании и пытаюсь загрузить расширение cytoscape-context-menu . Я следовал инструкциям на GitHub и попробовал этот test.js код:

require(['cytoscape.js', 'cytoscape-context-menus.js', 'jquery.js'], function( cytoscape, contextMenus, jquery ){
  console.log(contextMenus);
  contextMenus( cytoscape, jquery );  // register extension
});

Мой index.html выглядит так:

<script src="require.js"></script>
<script src="test.js"></script>

Я скачал последние версии всех файлов .js и поместил их в тот же каталог, что и index.html. Однако во время отладки в Chrome ContextMenus остается undefined, и я получаю этот тип ошибки:

test.js:3 Uncaught TypeError: contextMenus is not a function
    at test.js:3
    at Object.execCb (require.js:1696)
    at Module.check (require.js:883)
    at Module.<anonymous> (require.js:1139)
    at require.js:134
    at require.js:1189
    at each (require.js:59)
    at Module.emit (require.js:1188)
    at Module.check (require.js:938)
    at Module.enable (require.js:1176)
(anonymous) @   test.js:3
execCb  @   require.js:1696
check   @   require.js:883
(anonymous) @   require.js:1139
(anonymous) @   require.js:134
(anonymous) @   require.js:1189
each    @   require.js:59
emit    @   require.js:1188
check   @   require.js:938
enable  @   require.js:1176
init    @   require.js:788
callGetModule   @   require.js:1203
completeLoad    @   require.js:1590
onScriptLoad    @   require.js:1717
load (async)        
req.load    @   require.js:1942
load    @   require.js:1685
load    @   require.js:834
fetch   @   require.js:824
check   @   require.js:856
enable  @   require.js:1176
enable  @   require.js:1557
(anonymous) @   require.js:1161
(anonymous) @   require.js:134
each    @   require.js:59
enable  @   require.js:1113
init    @   require.js:788
(anonymous) @   require.js:1460
setTimeout (async)      
req.nextTick    @   require.js:1815
localRequire    @   require.js:1449
requirejs   @   require.js:1797
(anonymous) @   test.js:1

Я уже пробовал другие расширения от iVis-at-Bilkent, такие как cytoscape-popper, cytoscape-cose-bilkent точно таким же образом, и все это работало. Я просмотрел проблемный cytoscape-context-menus.js и увидел, что он имеет такую ​​структуру:

;(function(){ 'use strict';

  var $ = typeof jQuery === typeof undefined ? null : jQuery;

  var register = function( cytoscape, $ ){
  '' a lot of Code here ''
  }

  if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module
    module.exports = register;
  }

  if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module
    define('cytoscape-context-menus', function(){
      return register;
    });
  }

  if( typeof cytoscape !== 'undefined' && $ ){ // expose to global cytoscape (i.e. window.cytoscape)
    register( cytoscape, $ );
  }

})();

Он полностью отличался от других расширений, например cytoscape-popper.js начинается с этого:

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory(require("popper.js"));
    else if(typeof define === 'function' && define.amd)
        define(["popper.js"], factory);
    else if(typeof exports === 'object')
        exports["cytoscapePopper"] = factory(require("popper.js"));
    else
        root["cytoscapePopper"] = factory(root["Popper"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_8__) { 
... A lot of code here

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

...