【问题标题】:Modifying RakeFile to allow varied targets修改 RakeFile 以允许不同的目标
【发布时间】:2012-09-11 00:12:32
【问题描述】:

我正在开发一个带有 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

【问题讨论】:

    标签: ruby rake package rvm rake-task


    【解决方案1】:

    通常,您可以将参数传递给 rake 任务。参见例如this page

    但是,您无权从 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
    

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2011-08-15
      • 2010-09-17
      • 2015-04-15
      • 2017-05-12
      • 2012-09-19
      • 1970-01-01
      • 2011-09-17
      相关资源
      最近更新 更多