编程语言
首页 > 编程语言> > Ramaze CoffeeScript:是否可以使用Ramaze自动生成Javascript?

Ramaze CoffeeScript:是否可以使用Ramaze自动生成Javascript?

作者:互联网

我试图找到一种从CoffeeScript文件自动生成Javascript的方法,就像你在Sinatra中一样容易做到这样:

require 'sinatra'
require 'coffee-script'
get '/*.js' do
  name = params[:splat][0]
  file_name = File.join("#{name}.coffee")
  pass unless File.exists?(file_name)
  content_type(:js, :charset => 'utf-8')
  coffee(IO.read(file_name))
end

这样,在我的代码中,即使我只有.coffee文件,我也可以像.js文件一样存在.与使用客户端CoffeeScript编译器相比,它不那么特别且没有错误……

解决方法:

谢谢leucos !!!

我虽然关于Rack中间件,但想知道是否没有更多的“ramaze”解决方案(就像天生一样).

无论如何,这是有效的,它很棒!

以下是您的代码的修改版本:

require 'coffee-script'

# An attempt to allow Ramaze to generate Js file from coffee files
module Rack
  class BrewedCoffee
    def initialize(app, options = {})
      @app = app
      @lookup_path = options[:lookup_path].nil? ? [__DIR__] : options[:lookup_path]
    end

    def call(env)
      name = env['PATH_INFO']

      # Continue processing if requested file is not js
      return @app.call(env) if File.extname(name) != '.js'

      coffee_name = "#{name[0...-3]}.coffee"

      @lookup_path.each do |p|
        coffee_file = File.join(p, coffee_name)
        next unless File.file?(coffee_file)

        response_body = CoffeeScript.compile(File.read(coffee_file))
        headers = {}
        headers["Content-Type"] = 'application/javascript'
        headers["Content-Length"] = response_body.length.to_s

        return [200, headers, [response_body]]
      end

      @app.call(env)
    end
  end
end

我清理了一些东西并删除了Ramaze依赖,这样它就是一个纯粹的Rack中间件:).

您可以使用它来调用:

m.use Rack::BrewedCoffee, :lookup_path => Ramaze.options.roots

再见,
安德烈亚斯

标签:javascript,coffeescript,sinatra,ramaze
来源: https://codeday.me/bug/20190630/1332861.html