J'ai le module Mail dans le dossier avec cette structure:
- Mail
- templates
- <Handlebars files>
- mail.module.ts
Lorsque je construis (compile) un projet TypeScript, mon dossier template
n'est pas inclus dans le dossier build
. Comment déplacer ce type de fichiers dans dist
lors de la construction?
Est-ce différent pour les versions de développement et de production?
Le compilateur TS ne gère pas les fichiers autres que TypeScript ou JS (par exemple .ts
, .js
, .tsx
, etc.).
Une façon de le faire, il suffit d'exécuter cp
pour copier ces fichiers après avoir compilé NestJS. Dans votre package.json
remplacer la ligne
"build": "nest build",
avec
"build": "nest build && cp ./Mail/templates ./build",
Idéalement, je passerais à Webpack (ou similaire) pour transpiler TypeScript et copier des artefacts. NestJs a un exemple de base sur la façon de construire avec Webpack ici . Pour l'étendre afin d'avoir une phase de "copie", installez copy-webpack-plugin
npm package et ajoutez ces ajouts dans le fichier de configuration 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' }
])
]
}
Vous pouvez également le faire en ajoutant une propriété asset dans le nest-cli.json comme mentionné dans la documentation .
Pour votre cas, vous pouvez essayer quelque chose comme ceci:
"assets":["**/Mail/templates/*"]
Ou si vos modèles ont tous un type de fichier spécifique (je suppose qu'il s'appelle .template), cela devrait également fonctionner:
"assets":["**/*.template"]
Le deuxième exemple copiera tous les fichiers de type .template de tous les sous-répertoires vers votre dossier dist avec la même structure de dossiers lorsque vous exécutez une compilation nest. De même, vous pouvez l'utiliser pour copier n'importe quel type de fichier de votre choix (.json, .proto, etc.) en remplaçant .template dans le modèle glob.