次の構造のフォルダにメールモジュールがあります。
- Mail
- templates
- <Handlebars files>
- mail.module.ts
TypeScriptプロジェクトをビルド(コンパイル)すると、template
フォルダーがbuild
フォルダーに含まれません。ビルド時にこれらの種類のファイルをdist
に移動するにはどうすればよいですか?
開発ビルドと本番ビルドで違いはありますか?
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' }
])
]
}
documentation で説明されているように、nest-cli.jsonにアセットプロパティを追加してこれを行うこともできます。
あなたのケースでは、次のようなことを試すことができます:
"assets":["**/Mail/templates/*"]
または、すべてのテンプレートに特定のファイルタイプがある場合(私はその.templateが呼び出されていると想定しています)、これも機能するはずです。
"assets":["**/*.template"]
2番目の例では、ネストビルドを実行するときに、.templateタイプのすべてのファイルをすべてのサブディレクトリから同じフォルダー構造を持つdistフォルダーにコピーします。同様に、これを使用して、globパターンの.templateを置き換えることにより、選択した任意のファイルタイプ(.json、.protoなど)をコピーできます。