web-dev-qa-db-ja.com

typescriptをビルドするときにts以外のファイルをdistにコピーする方法は?

次の構造のフォルダにメールモジュールがあります。

- Mail
  - templates
      - <Handlebars files>
  - mail.module.ts

TypeScriptプロジェクトをビルド(コンパイル)すると、templateフォルダーがbuildフォルダーに含まれません。ビルド時にこれらの種類のファイルをdistに移動するにはどうすればよいですか?

開発ビルドと本番ビルドで違いはありますか?

3
Baterka

TSコンパイラは、TypeScriptまたはJS以外のファイル(.ts.js.tsxなど)を処理しません。

これを行う1つの方法は、NestJSをコンパイルした後にcpを実行してこれらのファイルをコピーすることです。 package.jsonの行を置き換えます

"build": "nest build",

"build": "nest build && cp ./Mail/templates ./build",

理想的には、Typepackをトランスパイルしてアーティファクトをコピーするために、Webpack(または同様のもの)に切り替えます。 NestJsには、Webpack here を使用してビルドする方法の基本的な例があります。 「コピー」フェーズを持つように拡張するには、copy-webpack-plugin npmパッケージをインストールし、それらの追加をwebpack構成ファイルに追加します。

const copyFiles = require('copy-webpack-plugin');
// ... omitted for abbreviation

module.exports = function(options) {
   return {
   // ... omitted for abbreviation
   ,
    plugins: [
      // ... omitted for abbreviation
      new copyFiles([
            { from: 'Mail/templates', to: 'templates' }
        ])
    ]
}
3
Jenya Y.

documentation で説明されているように、nest-cli.jsonにアセットプロパティを追加してこれを行うこともできます。

あなたのケースでは、次のようなことを試すことができます:

"assets":["**/Mail/templates/*"]

または、すべてのテンプレートに特定のファイルタイプがある場合(私はその.templateが呼び出されていると想定しています)、これも機能するはずです。

"assets":["**/*.template"]

2番目の例では、ネストビルドを実行するときに、.templateタイプのすべてのファイルをすべてのサブディレクトリから同じフォルダー構造を持つdistフォルダーにコピーします。同様に、これを使用して、globパターンの.templateを置き換えることにより、選択した任意のファイルタイプ(.json、.protoなど)をコピーできます。

1
Derryl Thomas