0

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

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

应用程序.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)
4

1 回答 1

1

从外观上看,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>标签试图在 path 加载一个文件/assets/styles.css,如果该路由没有在 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供您参考。这又是基于关于 Sprockets 的 Sinatra 食谱文章

于 2016-04-06T17:19:30.773 回答