从Rails资产管道中获取未压缩的JS

问题描述 投票:0回答:1

如何从终端运行Rails资产管道以获取未缩小的JavaScript?

我能够运行RAILS_ENV=development bundle exec rake assets:precompile,但是这似乎已经生成了包,而我正在寻找的只是简单地将所有coffeescript编译为javascript,而不是最小化并且不打包。我们只需要从代码库中删除coffeescript。

我也尝试过将npm模块脱咖啡因,但这会从Rails资产管道中产生不同的结果,并破坏我们所有的测试。

ruby-on-rails asset-pipeline sprockets
1个回答
0
投票

[有人将我引向了这篇文章:http://scottwb.com/blog/2012/06/30/compile-a-single-coffeescript-file-from-your-rails-project/,我对其进行了更新,使我可以选择在目录上递归运行,或在单个文件上递归运行。我将此添加到lib/tasks/,它的工作就像一个魅力。我添加了针对链轮样式指令的测试,该指令以#= require开头,因为CoffeeScript编译器会删除所有注释,这会导致所有内容中断。相反,我将所有跳过的文件手动转换为JS,并将伪指令包含为//= require,并且有效。

namespace :coffee do

  def do_one(filepath)
    File.write(filepath.chomp(".coffee"), CoffeeScript.compile(File.open(filepath)))
    File.rename(filepath, filepath.chomp(".js.coffee") + ".backup")
  end

  def cs_task(path)
    Dir.glob("#{path.chomp("/")}/*.js.coffee").each do |filename|
      file = File.open(filename)

      if (file.read[/\= require/])
        puts "skip #{filename}"
      else
        puts "process #{filename}"
        do_one(filename)
      end
    end
    Dir.glob("#{path.chomp("/")}/*/").each do |child_path|
      cs_task(child_path)
    end
  end

  task :cancel, :path do |t, args|
    cs_task(args.path)
  end

  task :show, :path do |t, args|
    puts CoffeeScript.compile(File.open(args.path))
  end

  task :one_off, :path do |t, args|
    do_one(args.path)
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.