angular / angular/angular-cli

`loader` option in the `application` builder does not work for *.css files.

未关闭
#27,433 9 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
angular/build:dev-server area: @angular/build freq1: low severity3: broken type: bug/fix
主要语言
TypeScript
星标
27k
派生
11.8k
平均合并
14 小时 23 分钟
30 天内合并 PR
162

描述

### Command

build, serve

### Is this a regression?

- [ ] Yes, this behavior used to work in the previous version

### The previous version in which this bug was not present was

_No response_

### Description

When trying to import a *.css file inside a *.ts with the following syntax:
```ts
import './my-styles.css';
```
The built css file is never loaded into the application.
I was pointed out in https://github.com/angular/angular-cli/issues/27414 that I should use the new `loader` however that does not seem to work.

`angular.json`:
```json
"loader": {
".css": "file"
}
```

`ng serve` output:
![image](https://github.com/angular/angular-cli/assets/9380964/f30a200b-9d1b-44b3-a3d3-93f39688d10d)

This would be useful in order to support third party libraries that use this kind of imports like `monaco-editor`.

Vite already handles this when we run `ng serve --prebundle=true` and it works when a library uses this imports, but it does not work with `ng build` or `ng serve --prebundle=false`.
Also esbuild is able to handle the import (https://esbuild.github.io/content-types/#css-from-js) and generate a css bundle for all the css imports that it finds in a entry point, for example I can see it generating a `main.css` file:
![image](https://github.com/angular/angular-cli/assets/9380964/1eb57b73-9526-4792-8086-73fbfed60fa2)
However, the css bundle outputted to the ./dist/** folder it is never loaded onto the app.

### Minimal Reproduction

ng new my-app
cd ./my-app

Create a *.css file called "import-styles.css"
Import the file above into the main.ts or other *.ts file of the app.

ng serve

### Exception or Error

_No response_

### Your Environment

```text
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/

Angular CLI: 17.3.3
Node: 20.11.1
Package Manager: npm 10.2.4
OS: win32 x64

Angular: 17.3.3
... animations, cli, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router

Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1703.3
@angular-devkit/build-angular 17.3.3
@angular-devkit/core 17.3.3
@angular-devkit/schematics 17.3.3
@schematics/angular 17.3.3
rxjs 7.8.1
typescript 5.4.4
zone.js 0.14.4
```

### Anything else relevant?

_No response_

贡献指南

打开贡献指南

调研方向

使用 angular.json、main.ts、ng build 和 ng serve 以及 .css loader 设置,通过最小示例重现该问题。首先跟踪 application builder 对从 TypeScript 导入的 CSS 的处理方式,然后验证生成的 CSS 已由 served application 加载,并确认在 build 和 serve 模式下行为一致。

由索引模型根据 Issue 内容生成。

评估

技术栈
angular, typescript
领域
build-system, frontend
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。