javascript - 通过requirejs加载sigmajs

标签 javascript requirejs amd sigma.js requirejs-define

我正在尝试RequireJS AMD,

并且想要加载 - 除其他外(jquery、bootstrap、d3、moment...) - 图形库 sigmajs , 但是当我将它加载到模块中时, 它是未定义的...但是它存在于窗口对象中...

在模块中需要它是一个不好的做法吗?是否应该在全局 requirejs 引导中需要它并从窗口使用它?

这是我的应用程序引导:

// My application root folder
index.html
build.js
assets/
    package.json
    bower.json
    gulpfile.js
    js/
        app.js
        modules/
            graph.js
        vendor/
            require-2.1.14.js
            jquery-2.1.1.min.js
            underscore-1.6.0.min.js
            d3-3.4.11.min.js
            moment-2.7.0.min.js
            sigma-1.0.2.min.js
            my-own-npm-module-1.0.0.min.js
    css/

我的 app.js 文件:requirejs 引导,似乎运行良好

// /assets/js/app.js
requirejs.config({
    baseUrl: 'assets/js/vendor',
    paths: {
        'jquery': 'jquery-2.1.1.min',
        'bootstrap': 'bootstrap-3.2.0.min',
        'moment': 'moment-2.7.0.min',
        '_': 'underscore-1.6.0.min',
        'd3': 'd3-3.4.11.min',
        'sigma': 'sigma-1.0.2.min',
        'my-own-npm-module': 'my-own-npm-module-1.0.0.min',
        'app': '../modules'
    },
    shim: {
        'bootstrap': {
            deps: ['jquery'],
            exports: '$'
        }
    }
});

// App loading
requirejs([
    'jquery',
    'bootstrap',
    'app/graph'
], function ($, bootstrap, graph) {
    graph.initialize();
});

我的 graph.js 文件,需要不幸的是未定义的 sigmaJs

define(['sigma', 'd3', 'my-own-npm-module'], function (sigma, d3, MyOwnModule) {
    var initialize,
        graph;

    initialize = function () {
        console.log('init', d3, sigma, sigma === window.sigma, MyOwnModule);
        // Here, d3 is well loaded and even MyOwnModule.
        // But unfortunately, sigma is undefined even if window.sigma is loaded
        // And of course, sigma === window.sigma returns false.
        graph = new sigma('graph-container');
    }

    return {
        'initialize': initialize
    }
});

最佳答案

这似乎是 SigmaJS 当前的一个小问题; 然而,使用 sigmaJs 的 nodeJs 版本是可能的:

npm install sigma

工作脚本文件将位于:

node_modules/sigma/build/sigma.require.js

但是,这需要调用 sigma.js 仅在窗口对象中加载 sigma ; 为了防止这种导出,最干净的方法是使用 requirejs 的“shim”选项:

requirejs.config({
    baseUrl: 'assets/js/vendor',
    paths: {
        'sigma': 'sigma-1.0.3.require'
    },
    shim: {
        'sigma': {
            exports: 'sigma'
        }
    }
});

关于javascript - 通过requirejs加载sigmajs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955125/

相关文章:

python - 使用 django-mediagenerator 时不需要 Require.js

javascript - 如何为 JavaScript 模块提供有条件的 AMD 支持?

javascript - 带有 requirejs/AMD 的 Webpack

javascript - 返回数组/对象的闭包公开其词法上下文 : best way to tackle in JavaScript?

javascript - 滚动时导航栏模糊

javascript - Casl Vue 根据异步获取请求的角色设置重新加载+在路由器中+登录后的能力

javascript - 如何保护 AngularJS $http.post 数据?

javascript - 错误 : $injector:modulerr Module Error on running the application?

asp.net-mvc-4 - 缺少尾部斜杠的 MVC 错误行为的解决方法

javascript - requirejs 优化器命名模块错误