Cargando Highcharts a través de shim usando RequireJS y manteniendo la dependencia de jQuery

Estoy intentando cargar la biblioteca de Highcharts usando un shim en RequireJS. Sin embargo, cuando se carga Highcharts, se produce una excepción porque no puede acceder a los métodos de jQuery de los que depende.

La configuración requerida se ve así:

require.config({
    baseUrl: "js",

    shim: {

        'libs/highcharts/highcharts.src.js': {
            deps: ['jquery'],
            exports: function(jQuery)
            {
                this.HighchartsAdapter = jQuery;

                return this.Highcharts;
            }
        }
    }
});

La excepción que se lanza es:

Uncaught TypeError: undefined is not a function

y es en lo que respecta a esta línea:

dataLabels: merge(defaultLabelOptions, {

El problema es elmerge call, que eventualmente se asigna de nuevo a jQuery (o algún otro adaptador compatible con Highcharts; pero solo estoy usando jQuery).

No estoy seguro de cómo asegurar que Highcharts tenga acceso a jQuery utilizando RequireJS y shim.

¿Alguien ha usado RequireJS y Highcharts juntos antes? Supongo que el problema no es específico de los gráficos altos, sino de cualquier biblioteca que tenga otro tipo de dependencias.

Gracias de antemano por cualquier consejo o puntos a la dirección correcta!

Para agregar más contexto, con la esperanza de que alguien que esté familiarizado con require.js o shims pueda ayudar sin tener que estar demasiado familiarizado con Highcharts, aquí hay algunas fuentes que configuran esto.merge método en Highcharts

var globalAdapter = win.HighchartsAdapter,
adapter = globalAdapter || {},

// Utility functions. If the HighchartsAdapter is not defined, 
// adapter is an empty object
// and all the utility functions will be null. In that case they are 
// populated by the
// default adapters below.

// {snipped code}

merge = adapter.merge

// {snipped code}

if (!globalAdapter && win.jQuery) {
    var jQ = win.jQuery;

    // {snipped code}

    merge = function () {
        var args = arguments;
        return jQ.extend(true, null, args[0], args[1], args[2], args[3]);
    };

    // {snipped code}
}

loswin objeto es una referencia configurada parawindow Al principio del guión. Entonces, pensé en agregarwindow.jQuery = jQuery; al método de exportación en la cuña daría lugar a que los gráficos altos seleccionen la referencia de jQuery; pero no lo hizo

Una vez más, cualquier información, información, consejo u obstáculos serían apreciados en este momento: estoy completamente perdido y empezar a cuestionar si intentar implementar y el sistema de paquetes AMD en el navegador javascript vale la pena.

Después de aceptar la respuesta dePabera a continuación, pensé que era apropiado actualizar mi pregunta para reflejar cómo su respuesta ayudó a mi solución (aunque, básicamente, es su respuesta).

RequireJS usa "rutas" para encontrar libretas que no son compatibles con "AMD" y las carga en su página. el objeto "shim" le permite definir dependencias para las bibliotecas definidas en las rutas. Las dependencias se deben cargar antes de que requirejs intente cargar el script dependiente.

La propiedad de exportaciones proporciona un mecanismo para indicar a requirejs cómo determinar si la biblioteca está cargada. Para librerías básicas como jquery, backbone, socketio, etc. todas exportan alguna variable de nivel de ventana (Backbone, io, jQuery y$, etc). Simplemente proporcione ese nombre de variable comoexports propiedad, y requirejs podrá determinar cuándo se carga la biblioteca.

Una vez que tus definiciones están hechas, puedes usarrequirejs' define Funciona como se espera.

Aquí está mi ejemplorequire.config objeto:

require.config({
    baseUrl: "/js/",

    paths: {
        jquery: 'jquery',
        socketio: 'http://localhost:8000/socket.io/socket.io', //for loading the socket.io client library
        highcharts: 'libs/highcharts/highcharts.src',
        underscore: 'libs/underscore',
        backbone: 'libs/backbone'
    },

    shim: {
        jquery: {
            exports: 'jQuery'
        },

        socketio: {
            exports: 'io'
        },

        underscore: {
            exports: '_'
        },

        backbone: {
            deps: ['jquery', 'underscore'],
            exports: 'Backbone'
        },

        highcharts: {
            deps: ['jquery'],
            exports: 'Highcharts'
        }
    }
});

ComoPabera mencionado anteriormente, esto es paraRequire.JS versión2.0.1.

Espero que alguien haga uso de esto; Sé que la carretera me bloqueó por un rato; así que, con suerte, evitamos que te golpees la cabeza en el mismo lugar en el muro que hicimos, publicando esto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta