NestJS - 构建后未将资产和视图文件夹添加到dist文件夹中
我的文件夹结构类似于以下内容:
/assets
/img
/fonts
/views
failure.hbs
success.hbs
/src
main.ts
/users
users.controller.ts
您可以通过将这些行添加到nest-cli.json
文件中来将这些文件夹复制到dist
文件夹中:
"compilerOptions": {
"assets": [
{
"include": "../assets",
"outDir": "dist/public",
"watchAssets": true
},
{
"include": "../views",
"outDir": "dist/views",
"watchAssets": true
}
],
"watchAssets": true
}
还要确保在构建应用程序时包含nest-cli.json
(例如:来自Dockerfile)
我来到这个线程进行 NestJS + EJS 设置(派对迟到),下面是我的目录结构。
/views
index.ejs
/src
main.ts
注意:在"nest-cli.json"中更改
compilerOptions
后修复了该问题。
"compilerOptions": {
"assets": [
{
"include": "views",
"outDir": "dist",
"watchAssets": true
}
],
"watchAssets": true,
"deleteOutDir": true
}
我在运行yarn build
时添加了自己的build.js
脚本:
package.json
:
"build": "nest build && node build.js"
它将视图和资产文件夹复制到 dist 构建文件夹中。
build.js
:
const fs = require('fs');
const path = require('path');
copyFolderRecursiveSync('views', 'dist');
copyFolderRecursiveSync('assets', 'dist');
function copyFileSync(source, target) {
let targetFile = target;
// If target is a directory, a new file with the same name will be created
if (fs.existsSync(target)) {
if (fs.lstatSync(target).isDirectory()) {
targetFile = path.join(target, path.basename(source));
}
}
fs.writeFileSync(targetFile, fs.readFileSync(source));
}
function copyFolderRecursiveSync(source, target) {
let files = [];
// Check if folder needs to be created or integrated
const targetFolder = path.join(target, path.basename(source));
if (!fs.existsSync(targetFolder)) {
fs.mkdirSync(targetFolder);
}
// Copy
if (fs.lstatSync(source).isDirectory()) {
files = fs.readdirSync(source);
files.forEach(function (file) {
const curSource = path.join(source, file);
if (fs.lstatSync(curSource).isDirectory()) {
copyFolderRecursiveSync(curSource, targetFolder);
} else {
copyFileSync(curSource, targetFolder);
}
});
}
}