NestJS - assets和views文件夹未被添加到dist目录

14
NestJS - 构建后未将 assets 和 views 文件夹添加到 dist 文件夹中
我的文件夹结构类似于以下结构:
/assets
  /img
  /fonts

/views
  failure.hbs
  success.hbs

/src
  main.ts
  /users
       users.controller.ts

这是正常的行为。构建会在 src 文件夹下编译 TypeScript 代码,并在 dist 文件夹中创建相同的文件夹结构以用于输出 js 文件。这可以帮助你保持相同的路径。你可以直接采用 assets、views 和 dist 等文件夹按照相同的顺序进行部署。 - Mehmet YILMAZ
这个回答解决了你的问题吗?如何在构建TypeScript时将非ts文件复制到dist目录? - Ele
4个回答

39

你可以通过将以下内容添加到你的nest-cli.json文件中,将这些文件夹复制到dist文件夹中:

"compilerOptions": {
  "assets": [
    "src/**/*.png",
    "src/**/*.jpg"
  ],
  "publish": {
    "include": [
      "dist/**/*"
    ]
  }
}

  "compilerOptions": {    
    "assets": [
      {
        "include": "../assets",
        "outDir": "dist/public",
        "watchAssets": true
      },
      {
        "include": "../views",
        "outDir": "dist/views",
        "watchAssets": true
      }
    ],
    "watchAssets": true
  }

1
请确保在构建应用程序时包含nest-cli.json(例如:从Dockerfile构建)。

0
我来到这个帖子是为了NestJS + EJS的设置(晚到派对),以下是我的目录结构。
/views
  index.ejs

/src
  main.ts

注意:在“nest-cli.json”中更改compilerOptions后,问题得到解决。
"compilerOptions": {    
    "assets": [
      {
        "include": "views",
        "outDir": "dist",
        "watchAssets": true
      }
    ],
    "watchAssets": true,
    "deleteOutDir": true
  }

-1
我在运行yarn build时添加了自己的build.js脚本。

package.json:

"build": "nest build && node build.js"

它将 views 和 assets 文件夹复制到 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);
      }
    });
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接