4

TeamCity でのビルド/CI プロセスの一環として、HTML で参照される一連の JavaScript ファイルを指定し、それらを 1 つに結合したいと考えています。

言い換えれば、これは私が達成したいことです。

前:

<script src="1.js" />
<script src="2.js" />

<script src="combined.js" />

1.js と 2.js を結合した .js に連結するコマンドライン ツールを探しています。次に、コマンドライン ツール (または同じツール) を使用して、HTML ファイル内の参照をこの新しいファイルに置き換えます。どうすればこれを達成できるか教えてください。

私がこれまでに試したこと:

私はgrunt-useminnpm installを見てきましたが、これは良さそうですが、依存関係を取得するためにビルドサーバーが各ビルドで実行する必要があり、それを実行する必要があります。非常に頻繁にビルドとデプロイを行うため、これには時間がかかりすぎて、良い解決策ではありません。

フォルダーを gitに追加することもできnode_modulesますが、これも望ましくありません。grunt がグローバルにインストールされたこれらのモジュールを実行できればいいのですが、それは grunt の方法ではありません (私が間違っていない限り、grunt はすべてをローカルにインストールすることを望んでいます)。

開発者のマシンで grunt を実行することも提案されました。繰り返しますが、一時的な VM があり、開発フローが中断されるため望ましくありません。

grunt-usemin をローカルで grunt なしで実行できたらいいのにと思います。

4

2 に答える 2

2

ファイルを結合するには、 cat を使用するだけです

cat 1.js 2.js > combined.js

HTMLのチャンクを置き換えるには、sedを使用できます

sed -i "s/<script src=\"1.js\">\n<script src=\"2.js\">/<script src=\"combined.js\">/g" *.html

これはかなり一般的な解決策ですが、私には少し不格好に思えます。この html をノードでレンダリングしている場合、結合されたファイルが存在する場合は、javascript で置き換えることを検討してください。

if (fs.existsSync('combined.js')) {
    res.end(html_contents.replace('<script src="1.js"/>\n<script src="2.js"/>','<script src="combined.js">'));
} else {
    res.end(html_contents);
}

パフォーマンスを向上させるために、もちろん fs.exists の非同期バージョンを使用できます

于 2013-08-01T20:36:51.863 に答える
2

私は自分自身を作成することになりました: https://npmjs.org/package/hashcat

npm install -g hashcat

@gustavohenke の推奨は近いものでしたが、最終的に h5bp はビルド サーバーで使用するには問題が大きすぎることが判明しました。最終的にこのモジュールを作成するのに時間はかからず、今のところ私のニーズを満たしています。将来、より良い答えが出るまで、これを答えとしてマークします。

于 2013-08-03T22:47:17.227 に答える