Spinejs依赖加载顺序

时间:2012-02-07 05:36:43

标签: spine.js

我正在尝试在Spine.js应用中使用elycharts。 Elycharts monkey-patches jQuery添加$('...')。chart(...)。不幸的是,我只是得到一个错误,说$没有功能“图表”。

因为这是我的第一个Spine.js应用程序,所以我使用spine.app生成它。这使用jQuery作为NPM模块。 Elycharts不是CommonJS友好的,因此必须包含在slug.json的“libs”部分中。根据Spine文档(参见Hem documentation中的slug.json),“libs”中的任何文件都会在“依赖项”中的任何内容之前加载。所以我很确定问题是elycharts是在jQuery之前加载,试图做它的猴子补丁,但由于$尚未定义,它会无声地失败。

有没有人看到类似的问题,使用“libs”依赖于已经包含在NPM中的库?有没有办法更精细地控制除libs之外的spine.js中的加载顺序 - >依赖

2 个答案:

答案 0 :(得分:0)

对我而言,“不太好”的解决方案是:

<script type="text/javascript">
    var jQuery  = require("jqueryify");
    var exports = this;
    jQuery(function(jQuery){
// load jquery dependant libraries                  
    $.getScript("//cdnjs.cloudflare.com/ajax/libs/waypoints/1.1.6/waypoints.min.js", function() {
        var App = require("index");
        exports.app = new App({el: $("#wrapper")});      
    });
</script>

所以诀窍是在初始化应用程序之前加载jquery依赖库。 希望它可以帮到某人。

答案 1 :(得分:0)

我一直在寻找一种解决方案,将Twitter Bootstrap(也取决于jQuery)包含在spine.js应用程序中(使用脊椎脚本生成)。我发现的最好的就是:只需将jqueryify替换为jquery.js

删除以下行:

./app/lib/setup.coffee:3:require('jqueryify')
./package.json:9:    "jqueryify": "~0.0.1",
./public/index.html:9:    var jQuery  = require("jqueryify");
./slug.json:5:    "jqueryify", 

然后将jquery.js和您的javascript库放入app/lib并将其添加到slug.json libs数组中:

"libs": [
  "app/lib/jquery.js",
  "app/lib/jquery-dependent-3rd-party-lib.js"
]

瞧!

P.S。对于Twitter Bootstrap,我建议将整个bootstrap目录放入public目录(因为它还带有CSS和图像),并相应地从slug.json引用它:

"libs": [
  "app/lib/jquery.js",
  "public/bootstrap/js/bootstrap.min.js"
]

这样更新Twitter Bootstrap库将是微不足道的 - 无需在整个地方分散文件。