angular 10:图像 url 在 `Ng build` 直接列在 `dist` 文件夹和 `dist->assets` 之后从资产中给出
angular 10: image url given from assets after `Ng build` is listing directly under `dist` folder and `dist->assets`
我发现了一种情况,在 ng build
之后图像直接列在 dist 文件夹下。
我创建了一个示例 angular 应用程序。以下是详细信息。甚至图像都在资产文件夹中。它被直接复制到 dist 下。这样,它就会重复,这也会导致构建大小增加。
如何避免这种情况?我只需要资产文件夹下的图像。外面应该很干净。如果有人遇到类似问题,请提供帮助。
项目结构
angular.json
"myapp": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "projects/myapp",
"sourceRoot": "projects/myapp/src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/myapp",
"index": "projects/myapp/src/index.html",
"main": "projects/myapp/src/main.ts",
"polyfills": "projects/myapp/src/polyfills.ts",
"tsConfig": "projects/myapp/tsconfig.app.json",
"aot": true,
"assets": [
"projects/myapp/src/favicon.ico",
"projects/myapp/src/assets"
],
"styles": [
"projects/myapp/src/styles.scss",
"projects/myapp/src/assets/theme/victor-theme/style.scss"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "projects/myapp/src/environments/environment.ts",
"with": "projects/myapp/src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
CSS
.tree_status_ico:disabled {
opacity: 0.6;
background-size: 18px;
background: transparent url(assets/img/agg_status.svg) no-repeat center;
}
构建后
我使用 Angular 12 创建了一个测试项目,它似乎确实有同样的问题。但我找到了一个应该有效的解决方案:
background: transparent url("/assets/img/agg_status.svg") no-repeat center;
当您进行 ng build 时,angular CLI 正在执行 AOT(提前编译)并将您的 angular 应用程序代码转换为 HTML、CSS,和JS。这就是您的 dist 文件夹的内容。您在资产文件夹中的图像将 linked 到 HTML IMG 标签,在 src 属性 中您将提供图像路径 'assets/imgName.jpg'。因此,编译代码部分也将使用相同的图像源 URL。因此你不能摆脱那个文件夹,因为这样做你的应用程序会中断,即由于资产文件夹在 dist 中丢失,因此不会获取图像。现在这个问题的一个可能的解决方案是-
- 在线发布您的图片并使用 link 作为 CSS 文件中的 img src URL 并从资产文件中删除图片。
- 或者从 angular.json 文件中删除资产数组中的“projects/myapp/src/assets”行并再次构建应用程序,但要避免您的应用程序失败,只需将资产文件复制粘贴到 dist 文件之前发布。
如果您遵循解决方案 2,资产数组将是
"assets": [
"projects/myapp/src/favicon.ico",
],
你能试试这两个选项吗?
"outputPath": "dist",
“resourcesOutputPath”:“图片”
我发现了一种情况,在 ng build
之后图像直接列在 dist 文件夹下。
我创建了一个示例 angular 应用程序。以下是详细信息。甚至图像都在资产文件夹中。它被直接复制到 dist 下。这样,它就会重复,这也会导致构建大小增加。
如何避免这种情况?我只需要资产文件夹下的图像。外面应该很干净。如果有人遇到类似问题,请提供帮助。
项目结构
angular.json
"myapp": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "projects/myapp",
"sourceRoot": "projects/myapp/src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/myapp",
"index": "projects/myapp/src/index.html",
"main": "projects/myapp/src/main.ts",
"polyfills": "projects/myapp/src/polyfills.ts",
"tsConfig": "projects/myapp/tsconfig.app.json",
"aot": true,
"assets": [
"projects/myapp/src/favicon.ico",
"projects/myapp/src/assets"
],
"styles": [
"projects/myapp/src/styles.scss",
"projects/myapp/src/assets/theme/victor-theme/style.scss"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "projects/myapp/src/environments/environment.ts",
"with": "projects/myapp/src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
CSS
.tree_status_ico:disabled {
opacity: 0.6;
background-size: 18px;
background: transparent url(assets/img/agg_status.svg) no-repeat center;
}
构建后
我使用 Angular 12 创建了一个测试项目,它似乎确实有同样的问题。但我找到了一个应该有效的解决方案:
background: transparent url("/assets/img/agg_status.svg") no-repeat center;
当您进行 ng build 时,angular CLI 正在执行 AOT(提前编译)并将您的 angular 应用程序代码转换为 HTML、CSS,和JS。这就是您的 dist 文件夹的内容。您在资产文件夹中的图像将 linked 到 HTML IMG 标签,在 src 属性 中您将提供图像路径 'assets/imgName.jpg'。因此,编译代码部分也将使用相同的图像源 URL。因此你不能摆脱那个文件夹,因为这样做你的应用程序会中断,即由于资产文件夹在 dist 中丢失,因此不会获取图像。现在这个问题的一个可能的解决方案是-
- 在线发布您的图片并使用 link 作为 CSS 文件中的 img src URL 并从资产文件中删除图片。
- 或者从 angular.json 文件中删除资产数组中的“projects/myapp/src/assets”行并再次构建应用程序,但要避免您的应用程序失败,只需将资产文件复制粘贴到 dist 文件之前发布。
如果您遵循解决方案 2,资产数组将是
"assets": [ "projects/myapp/src/favicon.ico", ],
你能试试这两个选项吗?
"outputPath": "dist", “resourcesOutputPath”:“图片”