我正在开发一个带有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
答案 0 :(得分: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