我目前正在实现一个运行时模块,它创建一个 sass 文件,从中生成一个 css 文件,删除 sass 并继续它的生活。我在 Rails on Sprockets 上。我一直在干预内部,并发现了它的 static_compiler 类。所以,我正在做的,一步一步,是:
- 生成 Sass 文件和 Sprite
- 实例化静态编译器
- 使用编译器生成带有摘要键的 css 和 sprite
现在,我很难使用 sass “image-url” 方法和 pngs。我在这样的 sass 文件上使用它:
image-url("image.png")
image-url("image.svg")
它指向 app/assets 下的正确子目录。摘要 image.svg 文件的名称是正确生成的,即 css 文件上的摘要键与文件中的摘要键匹配。但是 png 并没有发生同样的情况,css 文件中的摘要键与文件中的摘要键不匹配。我很难调试这个,因为声明“image-url”助手的位置不是很清楚。有谁知道为什么这只发生在 pngs 和/或 image-url 方法定义在哪里?(我只知道它不是一个 sass 文件,所以它必须是一个 rails 依赖项)。
编辑:
这是我的脚本示例:
bundled_sass = Sprockets::BundledAsset.new(Rails.application.assets, "random_name.css", sassfile_path)
bundled_svg = Sprockets::StaticAsset.new(Rails.application.assets, "sprite.svg", svgfile_path)
bundled_png = Sprockets::StaticAsset.new(Rails.application.assets, "sprite.png", pngfile_path)
compiler = Sprockets::StaticCompiler.new(Rails.application.assets,
destination_path,
Rails.application.config.assets.precompile,
#:manifest_path => Rails.application.config.assets.manifest,
:digest => Rails.application.config.assets.digest,
:manifest => true)
compiler.write_asset(bundled_svg)
compiler.write_asset(bundled_png)
compiler.write_asset(bundled_sass)
将 config.assets.digest 选项设置为 true,将 svg 和 png 复制到 destination_path 文件夹(通常是 public/assets),并且它们的名称会得到一个摘要键。编译sass文件时,为svg url生成的key是正确的。用于 png url 的摘要键与文件中的不同。