0

車のダッシュディスプレイユニットを含む複数のプラットフォームで使用されるRubyパッケージを使用したHTML5/JavaScriptアプリに取り組んでいます。コードベースは、単一のプラットフォームに対するすべてのAPI固有の呼び出し(つまり、「sdk.web.js」または「sdk.car.js」)を格納する単一のラッパーファイルを除いて、プラットフォーム間で同じです。

現在のPackageTaskを変更して、ターゲットプラットフォームへの入力を許可したいと思っています。ターゲットに応じて、対応するラッパーファイルの名前を「sdk.js」に変更してパッケージに含め、残りを無視してzipアーカイブをできるだけ小さくしたいと思います。

ターミナルから、私は次のようなことを言いたいです:

rake target "web"

これは、「sdk.web.js」を含むパッケージをまとめて「sdk.js」に名前を変更します。これが可能かどうか、そしてこれを達成するために既存のRakeFile(下記)をどのように変更するかを知っている人はいますか?

require 'fileutils'
require 'rake/packagetask'

VERSION = ""

task :default => [:package]

def parse_version(filename)
  f = File.open(filename, "rb")
  contents = f.read
  m = contents.match('var version = "([0-9.]+)";')
  if m
    return m[1]
  else
    return nil
  end
end

desc "Package up the app into a zip file"
Rake::PackageTask.new("myApp") do |p|
  p.version = parse_version("js/application.js")
  p.need_zip = true
  p.package_files = FileList["*", "**/*"]
  p.package_files.exclude(".git", "pkg/*", "Rakefile", ".rvmrc", "Gemfile", "Gemfile.lock", ".project", ".settings", ".gitignore", "data/store/*", "docs", "docs/*")
end
4

1 に答える 1

1

一般に、rakeタスクに引数を渡すことができます。たとえば、このページを参照してください。

ただし、PackageTaskからパッケージタスクにアクセスすることはできません。解決策は、適切なjsスクリプトを追加してから、パッケージを手動で呼び出す独自のパッケージ化タスクを定義することです。たとえば(テストされていない):

Rake::PackageTask.new("myApp") do |p|
  [snip]
  p.package_files << "sdk.js"
end

task 'custom_packaging', :sdk do |t, args|
  # Copy the right file to sdk.js
  FileUtils.cp_f "sdk.#{args[:sdk]}.js", "sdk.js"
  Rake::Task["package"].invoke
end
于 2012-09-11T05:56:30.717 に答える