Tìm kiếm trang web

xây dựng - Làm thế nào để sao chép các tệp không phải ts vào dist khi xây dựng typescript?


Tôi có mô-đun Mail trong thư mục với cấu trúc này:

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

Khi tôi xây dựng (biên dịch) dự án TypeScript, thư mục template của tôi không được bao gồm trong thư mục build. Làm thế nào để di chuyển những loại tệp này vào dist khi xây dựng?

Điều này có khác nhau giữa bản dựng phát triển và bản dựng sản xuất không?

Câu trả lời #1

Bạn cũng có thể làm điều này bằng cách thêm một thuộc tính tài sản trong file nest-cli.json như đã đề cập trong tài liệu.

Đối với trường hợp của bạn, bạn có thể thử một cái gì đó như thế này:

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

Hoặc nếu tất cả các mẫu của bạn đều có một loại tệp cụ thể (tôi đang giả sử nó được gọi là .template), điều này cũng nên hoạt động:

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

Ví dụ thứ 2 sẽ sao chép tất cả các tập tin có định dạng .template từ tất cả các thư mục con vào thư mục dist của bạn với cùng cấu trúc thư mục khi bạn chạy lệnh nest build. Tương tự, bạn có thể sử dụng cách này để sao chép bất kỳ loại tập tin nào bạn muốn (.json, .proto, v.v.) bằng cách thay thế .template trong mẫu glob.

Câu trả lời #2

Trình biên dịch TS không xử lý các tệp không phải TypeScript hoặc JS (ví dụ: .ts, .js, .tsx, v.v.).

Một cách để làm điều đó là chỉ cần chạy cp để sao chép những tệp đó sau khi bạn biên dịch NestJS. Trong package.json của bạn, thay dòng

"build": "nest build",

với

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

Lý tưởng nhất, tôi sẽ chuyển sang sử dụng Webpack (hoặc tương tự) để biên dịch TypeScript và sao chép các artifact. NestJs có một ví dụ cơ bản về cách xây dựng với Webpack ở đây. Để mở rộng nó để có một giai đoạn "sao chép", hãy cài đặt gói npm copy-webpack-plugin và thêm những bổ sung đó vào tệp cấu hình 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' }
        ])
    ]
}

Câu trả lời số 3

Một cách sửa nhanh cho tình huống của bạn là:

  1. npm install --save-dev copyfiles
  2. Chỉnh sửa file package.json của bạn để nó bao gồm một script mới:

    "postbundle": "copyfiles -u 1 src/**/*.template dist/"
  3. Thêm hoặc cập nhật script gói của bạn để nó khớp:

    "bundle": "tsc"

Một phương pháp tiên tiến hơn nữa sẽ là sử dụng Babel hoặc Webpack để thực hiện công việc biên dịch

Bài viết liên quan