Tìm kiếm trang web

xây dựng - Duy trì cấu trúc thư mục src/ khi xây dựng sang thư mục dist/ với TypeScript 3


Tôi có một máy chủ TypeScript nodejs với cấu trúc này:

tsconfig.json
package.json
src/
    middleware/
    utils/
    index.ts
dist/
    middleware/
    utils/
    index.js

Khi sử dụng TypeScript 2, tôi có thể biên dịch dự án của mình từ thư mục src/ sang thư mục dist/ và có một hình ảnh phản chiếu của cấu trúc thư mục để làm việc.

Với việc phát hành TypeScript 3, họ đã giới thiệu các tham chiếu dự án và thay đổi cách mã được biên dịch sang một thư mục đầu ra. Bây giờ tsc xuất ra thư mục dist/ theo cách lồng nhau như sau:

dist/
    src/
        middleware/
        utils/
        index.js

Tệp tsconfig.json của tôi là:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "allowJs": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "declaration": false,
    "outDir": "dist/",
    "lib": [
      "es7",
      "dom"
    ]
  },
  "include": [
    "src/"
  ]
}

Làm thế nào tôi có thể cấu hình TypeScript để xuất thư mục src/ của tôi như một hình ảnh phản chiếu vào thư mục dist/?

Câu trả lời #1

Tôi đã gặp vấn đề tương tự khi ban đầu chuyển đổi sang dự án TypeScript. Tôi cũng đặt resolveJsonModule: true và thư mục src đã được sao chép vào thư mục đầu ra dist.

Nguyên nhân cơ bản là một trong các tệp nguồn của tôi đã require package.json ở thư mục gốc của dự án. Khi tôi gỡ bỏ điều đó, tsc không còn thêm src vào thư mục dist nữa.

Tóm lại, hãy chắc chắn rằng bạn không yêu cầu các tệp ngoài thư mục src của bạn.

Hướng dẫn FAQ giải thích tại đây: https://github.com/Microsoft/TypeScript/wiki/FAQ#why-does---outdir-moves-output-after-adding-a-new-file

Câu trả lời #2

Cấu trúc của thư mục đầu ra được kiểm soát bởi rootDir của compilerOptions. Xem tài liệu tại đây, đặt nó thành ./src nên sẽ giải quyết được vấn đề.

{
  "compilerOptions": {
    "rootDir": "src",
    ...
  },
  "include": [
    "src/"
  ]
}

Câu trả lời số 3

Việc nâng cấp từ TypeScript 2 lên 3 tự nó không nên làm thay đổi hành vi; nếu chúng ta có thể xác nhận rằng nó đã thay đổi, thì đó có thể là một lỗi. Dù sao, hãy kiểm tra rằng tùy chọn trình biên dịch rootDir chỉ đến thư mục src của bạn chứ không phải thư mục cha, vì cấu trúc dưới rootDir là thứ được phản chiếu dưới outDir.

Câu trả lời số 4

Ngoài việc chỉ định compilerOptions.outDir, hãy chỉ định compilerOptions.rootDir trong tsconfig.json.

{
  "compilerOptions": {
     // ...
    "outDir": "dist",
    "rootDir": "./",
    // ...
  }
}

Sau đó chạy: $ tsc -b bên trong thư mục nơi có tệp tsconfig.json.

Lưu ý: compilerOptions.rootDir nên được sử dụng khi bạn muốn bao gồm cấu trúc các tệp của một thư mục không lồng nhau trong thư mục của tệp tsconfig.json.

Bài viết liên quan