仅出于测试目的,我尝试使用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) {
我做错了什么?
答案 0 :(得分:1)
不幸的是"scriptLoad": true
似乎与deps
的兼容性非常有限。
SystemJS通常的工作方式是获取模块,发现其依赖关系(通过扫描import
语句的源或require
调用),然后获取其依赖关系等等,然后&#34 ;连结"模块,包括按照依赖关系确定的正确顺序执行它们。
这里的假设是获取模块的顺序不受其依赖性的影响。
当scriptLoad
为真时,此假设会中断,因为当您使用<script>
标记时,它无法获取全局模块,但无法执行它。
您可以使用一个全局脚本a.js
进行非常简单的测试,具体取决于另一个b.js
,如果您观看网络流量,您会看到systemjs始终在a
之前获取b
1}},无论任何配置设置。
如果全局模块没有立即尝试使用它的依赖关系,那么这无关紧要,但是创建了一些可以在以后调用它们来完成工作的全局变量或函数 - 一切都可以通过调用由模块。
不幸的是,对于zurb文档来说并不是这样,当你使用<script>
标记加载jQuery时会立即尝试使用jQuery。