当使用包含,扩展和阻止时,玉石脚本的加载顺序看起来很扭曲

好的,我会尽量简化这个例子。 这是我的问题。 我使用节点并用玉来表示生成html。 我有一个主layout.jade文件,在正文结尾包含这个:

block scripts script(src='/javascripts/libs/jquery-1.8.1.min.js') 

然后我有一个部分(_shapes.jade)有以下代码的玉:

 block append scripts script(src='/javascripts/wire.js') 

然后我有我的玉文件(properties_panel.jade),它生成的HTML:

 extends ../layout include _shapes block controls include ../_controls 

wire.js文件需要运行jQuery。 玉的html输出和我所期望的完全一样。 我在body标签的末尾有一个脚本标记块,并且按照正确的顺序(jQuery优先)。

问题是jQuery并没有被浏览器首先加载。 但是,它似乎也加载jQuery后加载文件。 我推断这是因为我的wire.js文件被封装在一个自我执行的匿名函数中,如下所示:

 !function (context, $) { console.log($); }(this, window.jQuery); 

而在我的控制台,我得到2个日志。 第一个说'未定义',第二个正确的loggingjQuery。

所以这里是怪异的部分。 如果我从_shapes.jade中注释掉脚本行,而将其添加到jQuery import行之后的layout.jade文件中,它会生成完全相同的html文件,但是所有内容都按正确的顺序加载。

使用chrome开发者工具,我可以在资源标签中看到加载顺序,即使html完全没有改变,加载顺序也会根据jade文件生成相同的html的方式而改变。

难道我做错了什么? 我对玉是比较新的,所以我很可能是。

谢谢!

你应该在你的形状中使用“扩展布局”:

 extends layout block append scripts script(src='/javascripts/wire.js')