使用SystemJS和JQuery Dependancy导入全局JS文件

时间:2016-09-30 16:04:17

标签: systemjs

仅出于测试目的,我尝试使用SystemJS从Zurb Foundation导入以下javascript文件

http://foundation.zurb.com/sites/docs/assets/js/docs.js 这个脚本需要JQuery。

我的config.js文件包含以下内容:

meta: {
    "zurbDocs": {
      "scriptLoad": true,
      "format": "global",
      "exports": "zurbDocs",
      "deps": [
        "jquery"
      ]
    }
  },

map: {
...
    "jquery": "npm:jquery@2.2.4",
    "zurbDocs": "http://foundation.zurb.com/sites/docs/assets/js/docs.js",
...

然后我尝试进行导入

import 'zurbDocs';

但是会抛出错误:

  

未捕获的ReferenceError:$未定义(...)

当它使用jQuery' $符号时,它来自doc.js文件 在第3215行 - $('[data-docs-code]').each(function(index, value) { 我做错了什么?

1 个答案:

答案 0 :(得分:1)

不幸的是"scriptLoad": true似乎与deps的兼容性非常有限。

SystemJS通常的工作方式是获取模块,发现其依赖关系(通过扫描import语句的源或require调用),然后获取其依赖关系等等,然后&#34 ;连结"模块,包括按照依赖关系确定的正确顺序执行它们。

这里的假设是获取模块的顺序不受其依赖性的影响。

scriptLoad为真时,此假设会中断,因为当您使用<script>标记时,它无法获取全局模块,但无法执行它。

您可以使用一个全局脚本a.js进行非常简单的测试,具体取决于另一个b.js,如果您观看网络流量,您会看到systemjs始终在a之前获取b 1}},无论任何配置设置。

如果全局模块没有立即尝试使用它的依赖关系,那么这无关紧要,但是创建了一些可以在以后调用它们来完成工作的全局变量或函数 - 一切都可以通过调用由模块。

不幸的是,对于zurb文档来说并不是这样,当你使用<script>标记加载jQuery时会立即尝试使用jQuery。