[英]Spree - cannot override js.coffee file
只需按照http://guides.spreecommerce.com/developer/asset.html 中的说明进行操作,但它不起作用。 包含并加载了新的 js 文件,但如果我创建同名文件,则无论如何都会加载 product.js.coffee 原始文件。 有什么建议?
所有.js
//= require jquery
//= require jquery_ujs
//= require spree/frontend
//= require_tree .
我整个上午都在为这个问题而烦恼。
最后,对我/app/assets/javascripts/spree/frontend/all.js
在/app/assets/javascripts/spree/frontend/all.js
指定我想覆盖的每个文件。
例如,如果你想覆盖cart.js.coffee
和checkout/address.js.coffee
,你的all.js
应该是这样的:
//= require jquery
//= require jquery_ujs
//
//= require spree/frontend
//= require spree/frontend/cart
//= require spree/frontend/checkout/address
//
//= require_tree .
不要问我为什么有必要。 我的理解是//= require_tree .
应该自动执行此操作,但就我而言,好吧,事实并非如此。
创建all.js
文件并冗余指定每个文件后,这最终对我all.js
。 但我是一个狂欢/导轨菜鸟,所以很可能有更好的解决方案。
实际上,为了让这个工作,我不得不把上面的内容放在/vendor/assets/javascripts/spree/frontend/all.js
并删除/app/assets/javascripts/spree/frontend/all.js
。 仍然困惑为什么这是必要的以及为什么require_tree
不会自动选择这些,但很高兴最终让它工作。
为 Solidus 2.1.0 向后移植这个补丁解决了我替换/覆盖 JS 资产的问题 [1]。
问题似乎是 Sprockets 存在一个问题,即使用require_tree
或相关的require
阻止管道中的 JS 资产被覆盖。
总之
在您项目的供应商/资产下创建一个新文件,其文件名与您要在 Solidus 中替换的 JS 文件相同。 例如,要覆盖文件solidus_backend/app/assets/javascripts/spree/backend/flash.coffee
,请在您的项目中的your_project/{app,vendor}/assets/javascripts/spree/backend/flash.coffee
创建一个替换文件. [2]
在您的项目中创建文件your_project/{app,vendor}/assets/javascripts/spree/backend.js
和your_project/{app,vendor}/assets/javascripts/spree/backend/templates/index.js
。
将backend.js
和index.js
文件的内容从solidusio/solidus#1613复制到您的项目中。
删除 Solidus 版本中不存在的文件的任何需求,如果您已经定义了backend.js
和index.js
,则保留所有自定义需求。 [3]
脚注
包括 .js、.coffee、.hbs 以及在资产管道编译期间编译为 JavaScript 的任何其他文件。
项目中{app,vendor}/assets
之间的任一目录都可以使用,因为它们都应该在资产管道加载路径中。 您希望如何组织 Solidus 扩展和覆盖是一个偏好问题。
我不得不删除spree/backend/images/upload
从backend.js
和spree/backend/templates/products/upload_progress
从index.js
,因为我是用固相线的版本,并且这些文件还不存在,所以我会从链轮获取 FileNotFound 错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.