0

大規模な Web アプリケーションである Coffeescript/Javascript プロジェクトがあり、C++ プリプロセッサを使用してファイルをいくつか#ifdef#includeディレクティブと一緒につなぎ合わせています。ソースを大幅に簡素化し、整理しました。rakeビルドツールとして使用しています。

Rake からシステム コールとしてディレクティブを呼び出すことはできcpp -E -Xpreprocessorますが、Rake スクリプト自体の中で使用できるようにしたいと考えています。

例: 現在の使用状況

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

文字列を実行できる C++ プリプロセッサの Ruby 実装はありますか、またはより良い前処理の回避策を提案できますか?

4

1 に答える 1

2

Rails は、このような問題をアセット パイプラインで解決します。CoffeeScript -> JavaScript 変換を調整でき、ソース ファイル (またはディレクトリ ツリー) を簡単に含めて、それらを連結および縮小できます。

Sprockets はチェーン フィルターをサポートしています。たとえば、foo.js.coffeeJavaScript を生成する 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 に答える