Hướng dẫn typescript css-loader - trình tải css bản thảo

A) Như bạn đang nói, có một tùy chọn đơn giản nhất (không tốt nhất) để sử dụng yêu cầu:require:require:

const css = require('./component.css')
  • Chúng ta cần có các kiểu đánh máy cho
    declare function require(name: string): string;
    
    7 vì nó không phải là tính năng tiêu chuẩn trong TypeScript.
  • Gõ đơn giản nhất cho yêu cầu cụ thể này có thể là:

    declare function require(name: string): string;
    
  • Webpack sau đó sẽ biên dịch TypeScript và sử dụng các mô -đun đúng cách - nhưng không có bất kỳ trợ giúp IDE nào và tên lớp kiểm tra để xây dựng.BUT without any IDE help and class names checks for build.BUT without any IDE help and class names checks for build.

B) Có giải pháp tốt hơn để sử dụng nhập khẩu tiêu chuẩn:import:import:

import * as css from './component.css'
  • Cho phép tên lớp học đầy đủ IntelliSenseclass names IntelliSenseclass names IntelliSense
  • Yêu cầu các loại định nghĩa cho mỗi tệp CSS, nếu không Trình biên dịch
    declare function require(name: string): string;
    
    8 sẽ không thành công

Đối với Intellisense thích hợp, WebPack cần tạo định nghĩa loại cho từng tệp CSS:

  1. Sử dụng WebPack Typings-for-CSS-Modules-Loader

    webpackConfig.module.loaders: [
      { test: /\.css$/, loader: 'typings-for-css-modules?modules' }
      { test: /\.scss$/, loader: 'typings-for-css-modules?modules&sass' }
    ];
    
  2. Trình tải sẽ tạo các tệp

    declare function require(name: string): string;
    
    9 cho mỗi tệp CSS trong cơ sở mã của bạn
  3. Trình biên dịch TypeScript sẽ hiểu rằng nhập CSS sẽ là mô -đun với các thuộc tính (tên lớp) của chuỗi loại.

Đã đề cập

import * as css from './component.css'
0 chứa một lỗi và vì loại trì hoãn tạo tệp, tốt nhất là khai báo loại
import * as css from './component.css'
1 toàn cầu trong trường hợp tệp
declare function require(name: string): string;
9 của chúng tôi chưa được tạo.

Kịch bản lỗi nhỏ đó:

  1. Tạo tệp CSS
    import * as css from './component.css'
    
    3
  2. Bao gồm nó trong thành phần
    import * as css from './component.css'
    
    4
  3. Chạy
    import * as css from './component.css'
    
    5
  4. Trình biên dịch TypeScript sẽ cố gắng biên dịch mã (lỗi)
  5. Trình tải sẽ tạo tệp đánh máy mô -đun CSS (
    import * as css from './component.css'
    
    6), nhưng đã trễ trình biên dịch TypeScript để tìm tệp đánh máy mới
  6. Chạy lại
    import * as css from './component.css'
    
    5 sẽ sửa lỗi xây dựng.

Easy Fix là tạo định nghĩa toàn cầu (ví dụ: Tệp được gọi là

import * as css from './component.css'
8 trong root nguồn của bạn) để nhập các mô -đun CSS:
declare function require(name: string): string;
6

Định nghĩa này sẽ được sử dụng nếu không có tệp CSS được tạo (ví dụ: bạn đã thêm tệp CSS mới). Nếu không, sẽ được sử dụng cụ thể được tạo (cần phải có trong cùng một thư mục và được đặt tên giống như tệp nguồn +

import * as css from './component.css'
9), ví dụ.
import * as css from './component.css'
6 Định nghĩa và Intellisense sẽ hoạt động hoàn hảo.

Ví dụ về

import * as css from './component.css'
6:
declare function require(name: string): string;
0

Và nếu bạn không muốn xem các bản đánh máy CSS được tạo, bạn có thể thiết lập bộ lọc trong IDE để ẩn tất cả các tệp với phần mở rộng .css.d.ts trong các nguồn của bạn.

Thành thật mà nói, tôi không mong đợi bất kỳ vấn đề nào với chủ đề này nhưng tôi phải nói rằng tôi đã dành một ngày để tìm cách thiết lập các mô -đun CSS trong dự án TypeScript để hành động như tôi muốn. Có nhiều bài viết bạn có thể đọc cho chủ đề này nhưng hầu hết trong số chúng tôi không quản lý để làm việc. Tôi tránh phản ứng những ngày này do sự thay đổi tâm trí cần thiết để chấp nhận mô hình thông lượng và tất cả các phần khác được yêu cầu như Redux nhưng tôi sẽ không nói thêm về điều đó.

Ảnh của Ferenc Almasi trên unplash

Mục tiêu của tôi là thiết lập các mô -đun CSS trong dự án TypeScript được xây dựng với WebPack trong khi đạt được các mục tiêu sau:

  • Thời gian xây dựng nhanh để phát triển
  • Giảm thiểu CSS được sáp nhập vào một tệp để sản xuất
  • Đã tách CSS thành các tệp được phân tách
  • Các lớp CSS bị cô lập cho các thành phần từ CSS phổ biến cho ứng dụng
  • Tự động hoàn thành trong mã VS cho các mô -đun CSS

Bước đầu tiên - Nhập tệp CSS trong TypeScript

Mục tiêu đầu tiên cần đạt được là khả năng nhập các tệp CSS trong dự án.

declare function require(name: string): string;
1

Để làm như vậy, cấu hình webpack của bạn phải có trình tải cho các tệp CSS. Tôi đã sử dụng bộ tải CSS cho như vậy.css-loader for such.css-loader for such.

Vì vậy, bạn cần cài đặt nó trước với lệnh.

declare function require(name: string): string;
2

Sau đó, bạn cần chỉ định trong tệp cấu hình webpack của bạn trong mô -đun phần -> Quy tắc cách các tệp CSS sẽ được tải.module -> rules how CSS files will be loaded.module -> rules how CSS files will be loaded.

declare function require(name: string): string;
3

Với thiết lập này, trang web của bạn sẽ tải nội dung của tất cả các tệp CSS theo thứ tự do đó được nhập bằng cú pháp:

declare function require(name: string): string;
4

Build WebLack sẽ hoạt động nhưng rắc rối là nội dung này ngoại trừ được lưu trữ trong tệp JS được biên dịch không thể được sử dụng cho bất cứ điều gì.

Nếu bạn muốn nhúng nội dung của tất cả các tệp CSS vào trang máy chủ trong thẻ, bạn nên chuỗi trình tải kiểu. Tùy chọn này được khuyến nghị cho mục đích phát triển vì nó là lựa chọn nhanh nhất. Đối với mục đích sản xuất, bạn nên hợp nhất tất cả các tệp CSS, giảm thiểu và tạo một tệp nên được tải trong trang máy chủ. Đối với kịch bản như vậy, bạn có thể chuỗi minicssextractplugin xuất ra một tệp và cssminimizerplugin để giảm thiểu.