gpt4 book ai didi

ruby-on-rails - Rails 引擎 : shared asset dependencies

转载 作者:行者123 更新时间:2023-12-04 15:25:43 24 4
gpt4 key购买 nike

我正在编写一个可安装的 Rails 3.1 引擎,为主应用程序添加功能(即它不是孤立的)。引擎的JS依赖于jQuery , jQueryUI , DataTablesJSTree (在其他库中)所以引擎的 list 看起来有点像:

// my_engine.js

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jstree_pre1.0_fix_1/jquery.jstree.js
//= require_tree .

然后,我可以使用以下方法有条件地将此文件加载到主应用程序的布局中:
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'my_engine/my_engine' if user_logged_in? %>

但是,如果主应用程序的 list 已经包含依赖项之一(最有可能是 jQuery 和 jQuery_UJS),那么这些依赖项将被加载两次。我会看到类似的东西:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
...
<script src="/assets/application.js?body=1" type="text/javascript"></script>

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jstree_pre1.0_fix_1/jquery.jstree.js?body=1" type="text/javascript"></script>
...
<script src="/assets/cms/application.js?body=1" type="text/javascript"></script>

Sprocketrequire指令在同一个包中只需要一次 Assets ,但在这里我使用两个包。为了让其他开发人员实现我的引擎变得简单,我希望他们能够包含一行来检测是否已包含共享依赖项。是否有使用 sprockets 的好方法?

最佳答案

最后,我选择不让供应商库成为硬依赖项,并且我已经将它们写入文档中,必须手动要求它们。这为下游开发人员创造了更多的工作,但我认为它提供了最大的灵活性。

因此,引擎的 list 文件 my_engine.js , 现在只是:

//= require_tree .

和一个示例主应用程序:
application.js :
//= require jquery
//= require jquery_ujs
//= require_tree .
my_engine_requirements.js :
//= require jquery-ui
//= require jstree_pre1.0_fix_1/jquery.jstree.js
//= require my_engine/my_engine
application.html.erb :
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'my_engine_requirements' if user_logged_in? %>

这个解决方案在技术上没有回答我最初的问题,但这是我在对情况进行更多合理化之后所做的。

关于ruby-on-rails - Rails 引擎 : shared asset dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com