如何复制非ts文件到dist当构建typescript?

3okqufwl  于 2023-05-01  发布在  TypeScript
关注(0)|答案(8)|浏览(236)

我有邮件模块在文件夹与以下结构:

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

当我构建(编译)TypeScript项目时,我的template文件夹不包含在build文件夹中。如何在构建时将这些类型的文件移动到dist中?
开发版本与生产版本是否不同?

q5iwbnjs

q5iwbnjs1#

您也可以通过在nest-cli中添加资产属性来完成此操作。json文件中提到的。
对于您的情况,您可以尝试这样的操作:

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

或者如果你的模板都有一个特定的文件类型(我假设它被称为。模板),这也应该工作:

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

第二个示例将复制类型的所有文件。模板从所有子目录到您的dist文件夹具有相同的文件夹结构时,你运行一个巢建设。同样,您可以使用此选项复制您选择的任何文件类型(。json、.proto等)。模板中的glob模式。

bqujaahr

bqujaahr2#

TS编译器不处理TypeScript或JS以外的文件(例如。例如.ts.js.tsx等。).
一种方法是,在编译NestJS之后,运行cp来复制这些文件。在您的package.json中替换行

"build": "nest build",

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

理想情况下,我会切换到Webpack(或类似的)来转译TypeScript并复制工件。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' }
        ])
    ]
}
jgovgodb

jgovgodb3#

对于您的场景,一个快速解决方案是:

  1. npm install --save-dev copyfiles
    1.修改您的软件包。json,所以它包含了一个新的脚本:
    "postbundle": "copyfiles -u 1 src/**/*.template dist/"
    1.添加或更新您的捆绑包脚本,使其匹配:
    "bundle": "tsc"
    另一种更高级的方法是使用babel或webpack进行编译工作
3hvapo4f

3hvapo4f4#

我也遇到了同样的问题,然后创建了typescript-cp
它根据项目的tsconfig检测源和输出目录。json(使用typescript自己的配置解析器,以尽可能顺利地工作),并将非TS文件复制到outDir。
它有一个非常基本的CLI,参数与typescript的tsc相似,但它是tscp。它还支持包引用。

# Copy
$ tscp

# Copy for TS project references
$ tscp -b

# Watcher
$ tscp -w

# Watcher for TS project references
$ tscp -b -w

# Custom compiler settings
$ tscp -p tsconfig.production.json

# Help
$ tscp -h

如果某些东西没有按预期工作,请随意打开一个问题。

c9x0cxw0

c9x0cxw05#

我也有同样的问题。

  • 如果你的模板目录在src文件夹下,正如Derryl Thomas在前面的答案中所说,你需要在nest-cli中指定你的资产的路径位置。json文件。

注意事项:
资源必须位于src文件夹中,否则将不会复制它们。

  • 如果你的模板目录和src文件夹处于同一级别,你还需要更新nest-cli.json文件的sourceRoot属性和entryFile属性。

要查看您的配置文件应该是什么样子,您可以下载cli diagram here
以下是我的项目存档:

这就是我的巢式。json文件看起来像

{
  "$schema" : "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot" : ".",
  "compilerOptions" : {
    "assets" : ["config.*.yaml", "assets/**"]
  },
  "entryFile" : "src/main"
}
ifmq2ha2

ifmq2ha26#

如果你想要一个轻松的方式来做它,流行的ts-node包可以自动做到这一点!ts-node相当于运行node,但适用于TypeScript项目。如果你要使用ts-node,你不必编译TypeScript文件并运行js文件,ts-node在后台完成这一切。

wgx48brx

wgx48brx7#

在我的例子中,我添加了assets配置来复制html文件,它工作了。

  • nest-cli.json*
{
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "assets": ["**/*.html"]
  }
}
pnwntuvh

pnwntuvh8#

首先,将下面的代码添加到nest-cli中。json

"compilerOptions": {
    "assets": ["*.proto"],
    "watchAssets": true
  }

然后最重要的是你必须把你的文件放在**/src**目录下,而不是项目根目录下。

相关问题