我正在尝试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/