【问题标题】:Using requireJS within Wordpress在 Wordpress 中使用 requireJS
【发布时间】:2013-10-10 05:16:02
【问题描述】:

我正在为我设置一种方法来保持我喜欢的 requireJS 工作方式并将其与 Wordpress 集成。

最大的问题是如何加载 jquery。 Wordpress 通过 wp_enqueue_script 加载 jQuery,这需要保持这种方式,因为我经常使用的一些 Wordpress 插件需要以这种方式添加 jquery。然后我不想在我的 requireJS 设置中加载第二个版本的 jQuery。所以,经过一番环顾,这就是我想出的:

模板/footer.php

<script>
if (typeof jQuery === 'function') {
    define( 'jquery', function () { return jQuery; } );
}

require(['/assets/js/sample-common.js'], function (common) {
   require(['sample-bootstrapper']);
});
</script>

查看是否已将 jQuery 添加到页面中,如果已添加,则将其设置为模块值。

我的问题是我应该将 jquery 留在全局命名空间中,还是按照以下说明进行操作:

http://requirejs.org/docs/jquery.html#noconflictmap

上面的问题是我可能需要包含与 AMD 不兼容的 jquery 插件,是否值得努力使它们与 AMD 兼容,或者我想到的另一个解决方案是从 noConflict 声明中删除 true全局命名空间中的“jQuery”允许插件运行。

这与其说是一个问题,不如说是在寻求最佳实践建议。任何将不胜感激!

谢谢!

【问题讨论】:

  • 我认为除了不定义它之外,您还需要将“jquery”放入您的需求中?

标签: javascript php jquery wordpress requirejs


【解决方案1】:

WordPress 将 jQuery 加入队列是因为它是一个脚本,您应该为自己的脚本做同样的事情,因为这意味着 WordPress 可以优雅地为您处理依赖项。这里还要注意,WordPress 捆绑的 jQuery 已经以 noConflict() 模式加载,以防止插件冲突。

如果您将 jQuery 指定为脚本的依赖项之一,那么 WordPress 会将其添加到任何添加依赖于它的脚本的页面 - 但前提是它尚未加载(它不会再添加它时间)。

更新:根据@brasofilo 评论,get_stylesheet_directory() 函数搜索子元素,然后搜索父元素,如果子元素中不存在任何匹配项。在父子主题情况下都可以安全使用get_stylesheet_directory()

取自 WP codex 并修改:http://codex.wordpress.org/Function_Reference/wp_enqueue_script

/**
 * Proper way to enqueue scripts and styles
 */
function theme_name_scripts() {
    wp_enqueue_script( 'script-name', get_template_directory_uri() . '/assets/js/sample-common.js', array( 'jquery' ), '1.0.0', true );
}

add_action( 'wp_enqueue_scripts', 'theme_name_scripts' );

这里值得注意的是,如果您的脚本位于子主题目录中,那么您应该将get_template_directory_uri() 替换为get_stylesheet_directory_uri()

【讨论】:

  • get_stylesheet_搜索child,如果不存在则搜索parent,即在任何情况下都可以安全使用。
  • 也许应该在我链接的法典页面中关于$src 参数的部分中注意...感谢您指出@brasofilo :)
  • 感谢您的回答威廉。我知道我可能应该坚持使用 wp_enqueue_script 来加载我的所有脚本,但我更愿意坚持使用 requireJS,因为这就是我在 Wordpress 之外编码的方式,并且当我在将模板集成到 WP 之前构建模板时,我不想重构我的适合的代码。
  • 实际上并没有回答如何在 Wordpress 中使用 requireJS 的问题
  • @Octoxan 我删除了我之前的评论,因为我看到了你在这里评论和投票的意义。享受徽章和帽子的进步;)
猜你喜欢
  • 1970-01-01
  • 2013-02-19
  • 2013-07-02
  • 2012-11-05
  • 2012-06-27
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多