在 RequireJS 中调用对象函数

Call object function in RequireJS

我使用 RequireJS 加载一些脚本。

现在我想创建一些自己的方法,这些方法也需要加载的脚本。我已经尝试了很多,但我总是得到 Uncaught (in promise) ReferenceError: hd is not defined。两个脚本都加载到我的 index.html.

从 main.js

调用方法 'connect'
hd.connect.call(token);

套接字-workers.js

...
require.config({

shim: {
    'socket.io': {
      exports: 'io'
    },
    'socket.io-stream': {
      exports: 'ss'
    }
  },
  paths: {
    'socket.io': WEBSOCKET_PROXY_HOST + '/socket.io/socket.io',
    'socket.io-stream': WEBSOCKET_PROXY_HOST + '/socket.io-stream/socket.io-stream'
  },
  waitSeconds: 1

});

requirejs([
  'socket.io', 'socket.io-stream'
], function(io, ss) {

  // Setup Methods & Events

  const hd = {

    connect : function(token) {
      // Connect to Socket, Proxy Server & authenticate
      socket = io(WEBSOCKET_PROXY_HOST, {
        auth: {
          token: token
        }
      }).on('connect', function(data) {
        socketConnected = true;
        isStreaming = false;
        console.log('connected to socket');
        if (activeRecording) {
          //#startRecording();
        }
      });
...

我终于找到了解决这个问题的方法。我已经添加

window.hd = hd; 

在函数中使方法可用。

现在我可以调用每个方法,例如hd.connect(), hd.disconnect()

RequireJS可以这样使用,但是还有一个更合适的方法——定义一个模块,然后在定义另一个模块时require它:

套接字-workers.js:

require.config({

shim: {
    'socket.io': {
      exports: 'io'
    },
    'socket.io-stream': {
      exports: 'ss'
    }
  },
  paths: {
    'socket.io': WEBSOCKET_PROXY_HOST + '/socket.io/socket.io',
    'socket.io-stream': WEBSOCKET_PROXY_HOST + '/socket.io-stream/socket.io-stream'
  },
  waitSeconds: 1

});

define('hd', [
  'socket.io', 'socket.io-stream'
], function(io, ss) {

  // Setup Methods & Events

  const hd = {

    connect : function(token) {
      // Connect to Socket, Proxy Server & authenticate
      socket = io(WEBSOCKET_PROXY_HOST, {
        auth: {
          token: token
        }
      }).on('connect', function(data) {
        socketConnected = true;
        isStreaming = false;
        console.log('connected to socket');
        if (activeRecording) {
          //#startRecording();
        }
      });
    );



    return hd;

main.js:

define(['hd'], function (hd) {
  hd.connect.call(token);
});