构建打字稿时如何将非ts文件复制到dist?

Bat*_*rka 20 build typescript nestjs

我在具有以下结构的文件夹中有邮件模块:

- Mail
  - templates
      - <Handlebars files>
  - mail.module.ts
Run Code Online (Sandbox Code Playgroud)

当我构建(编译)TypeScript 项目时,我的template文件夹不包含在build文件夹中。dist构建时如何将这些文件移入?

开发和生产构建有什么不同吗?

Alb*_*rto 20

针对您的情况的快速解决方法是:

  1. npm install --save-dev copyfiles

  2. 修改您的 package.json,使其包含一个新脚本:

    "postbundle": "copyfiles -u 1 src/**/*.template dist/"

  3. 添加或更新您的捆绑脚本,使其匹配:

    "bundle": "tsc"

另一种更高级的方法是使用 babel 或 webpack 进行编译工作


Der*_*mas 9

您也可以通过在文档中提到的 nest-cli.json 中添加资产属性来完成此操作。

对于你的情况,你可以尝试这样的事情:

"assets":["**/Mail/templates/*"]
Run Code Online (Sandbox Code Playgroud)

或者,如果您的模板都有特定的文件类型(我假设它称为 .template),这也应该有效:

"assets":["**/*.template"]
Run Code Online (Sandbox Code Playgroud)

当您运行嵌套构建时,第二个示例会将 .template 类型的所有文件从所有子目录复制到具有相同文件夹结构的 dist 文件夹。同样,您可以通过替换 glob 模式中的 .template 来使用它来复制您选择的任何文件类型(.json、.proto 等)。

  • 只是提一下, `"assets":["**/Mail/templates/*"]` 应该放在 `compilerOptions` 对象内 (13认同)

Jen*_* Y. 8

TS编译器不处理比打字稿或JS(例如其他文件.ts.js.tsx等)。

一种方法是在cp编译 NestJS 后运行复制这些文件。在您的package.json替换行中

"build": "nest build",
Run Code Online (Sandbox Code Playgroud)

"build": "nest build && cp ./Mail/templates ./build",
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会切换到 Webpack(或类似的)来转译 TypeScript 和复制工件。NestJs有关于如何使用的WebPack建立一个基本的例子在这里。要将其扩展为“复制”阶段,请安装copy-webpack-pluginnpm 包并在 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' }
        ])
    ]
}
Run Code Online (Sandbox Code Playgroud)


ben*_*zda 8

我正在努力解决同样的问题,然后创建了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
Run Code Online (Sandbox Code Playgroud)

如果某些内容未按预期工作,请随时提出问题。