如何在 Sinatra 应用程序中使用 rails-autoprefixer?

how to use rails-autoprefixer in Sinatra app?

我无法使自动前缀工作。它被调用,但在我的 css 代码中没有结果。

这里有 Sinatra 应用的说明 - https://github.com/ai/autoprefixer-rails

application.rb

class Application < Sinatra::Base
  # Load path and gems/bundler
  $LOAD_PATH << File.expand_path(File.dirname(__FILE__))
  require "bundler"
  Bundler.require
  register Sinatra::AssetPipeline
  assets = Sprockets::Environment.new
  AutoprefixerRails.install(assets)    
  ### other

  # Actual Rails Assets integration, everything else is Sprockets
  if defined?(RailsAssets)
    RailsAssets.load_paths.each do |path|
      settings.sprockets.append_path(path)
    end
  end
end

我查看了 gem 来源并找到了这样的例子:

@assets = Sprockets::Environment.new
@assets.append_path(@dir.join('app/app/assets/stylesheets'))
AutoprefixerRails.install(@assets, browsers: ['chrome 25'])

@dir = Pathname(__FILE__).dirname
@css = @dir.join('app/app/assets/stylesheets/test.css').read
AutoprefixerRails.process(@css)

从表面上看,Sprockets 配置不正确。 Sprockets::Enviroment 获取一个块,使用该块到 资产需要配置。这是我使用的文件夹结构 这个例子:

├── app.rb
├── assets
│   ├── some_more_styles.css
│   └── styles.css
└── views
    └── index.erb

以下是我配置 Sprockets 环境的方式:

# app.rb
require 'autoprefixer-rails'

assets = Sprockets::Environment.new do |env|
  # This ensures sprockets can find the CSS files
  env.append_path "assets"
end

AutoprefixerRails.install(assets)

还有一个步骤可以让 Sprockets 与 Sinatra 一起工作。每个 资产需要手动路由。例如,如果 index.erb<link> 标签试图加载路径 /assets/styles.css 中的文件, 如果该路由未在中定义,则该路由将导致 404 Not Found 错误 app.rb。为避免这些 404,请像这样定义路由:

# app.rb
get '/assets/*' do
  # The env["PATH_INFO"] results in the string '/assets/styles.css' in
  # our example. We need to remove the '/assets' part since Sprockets
  # will take care of appending it when invoked on the next line.

  env["PATH_INFO"].sub!("/assets", "")
  assets.call(env)
end

我已将完整代码上传至 https://gist.github.com/kgrz/5caf63f827e5a6181597cefae484a515 为你 参考。这又基于 Sinatra Recipes 上的文章 链轮