0

#ifdef我有一个 Coffeescript/Javascript 项目,它是一个大型 Web 应用程序,我正在使用 C++ 预处理器将文件与一些#include指令拼凑在一起。它极大地简化和组织了我的资源。我正在rake用作我的构建工具。

我可以将该cpp -E -Xpreprocessor指令称为来自 rake 的系统调用,但我希望能够在 Rake 脚本本身中使用它。

例如当前使用情况

pre_processed_code = `cpp -E -Xpreprocessor -DDebug app.coffee`

是否可以运行字符串的 C++ 预处理器的任何 ruby​​ 实现,或者任何人都可以建议更好的预处理解决方法?

4

1 回答 1

2

Rails 使用资产管道解决了此类问题。它可以编排 CoffeeScript -> JavaScript 转换,并且您可以轻松地包含源文件(或目录树)以将它们连接和缩小。

Sprockets 支持链接过滤器。例如,foo.js.coffee将被视为生成 JavaScript 的 CoffeeScript,它本身可能包含其他依赖项并且是缩小的候选对象。为条件编译引入外部变量、从数据库中内联对象以及其他古怪的行为可以很容易地通过链接其他过滤器来适应,例如foo.js.coffee.erb

<% if environment == 'production' %>
log = (args...) ->
  # no-op
<% else %>
log = (args...) ->
  console.log(args...)
<% end %>

所有这一切通常在开发中即时执行,并通过生产中的编译步骤执行,其中单个源文件在交付到 Web 服务器之前被处理、合并和优化。这也适用于 CSS 预处理器和 JavaScript 模板语言——如果有人想要编译一个与 Web 相关的东西,那么在某个地方可能会支持它。

您可能没有使用 Rails,但这不应该阻止您利用所有这些工作:资产管道实际上是一个名为Sprockets的独立 gem 。您可能会用它代替现有的构建过程。这不是 C++ 预处理器,但它是许多其他人为解决此问题所做的工作。

于 2012-09-24T15:52:28.210 回答