Из этого вопроса о переполнении стека , я пытаюсь использовать @angular-builders/custom-webpack:browser
с настраиваемой конфигурацией Webpack, которая использует html -loader и file-loader, чтобы переименовать файлы ресурсов с их ha sh, а также каждая ссылка на них в исходном коде.
Конечная цель - иметь возможность кэшировать ресурсы в браузере, но гарантировать, что у пользователя всегда будет последняя версия актив (потому что, если он изменится в связи с выходом новой версии, изменится и название актива).
Я начал с руководства Angular Tour of Heroes (https://angular.io/tutorial) и выполнил следующие шаги:
(в dashboard.component. html Я добавил)
...
<img src="assets/angular-logo.png" />
...
Затем я добавил src/assets/angular-logo.png
Я изменил angular.json
файл для использования пользовательского построителя
"architect": {
"build": {
"builder": "@angular-builders/custom-webpack:browser", <------------- (changed this)
"options": {
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"customWebpackConfig": { <---------------------------------------- (added this)
"path": "custom-webpack.config.js"
},
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
...
}
Затем я создал custom-webpack.config.js
в root приложения:
module.exports = {
module: {
rules: [
{
test: /\.ts$/,
loaders: ['awesome-typescript-loader', 'angular2-template-loader'],
exclude: [/\.(spec|e2e)\.ts$/]
},
{
test: /\.html$/,
use: ['html-loader']
},
{
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
loader: 'file-loader',
options: {
outputPath: 'assets/',
name: '[name].[contenthash].[ext]',
},
}
]
}
}
и я npm установил все необходимые загрузчики а также @angular-builders/custom-webpack
.
Насколько я понимаю, когда я запускаю ng build --prod
, это будет (o n поверх существующей конфигурации Angular Webpack)
- Загрузить файлы TypeScript (используя
awesome-typescript-loader
) - Загрузить templateUrl и styleUrls из Angular компонентов (используя
angular2-template-loader
) - Загрузить HTML файлов
- Загрузить файлы изображений и переименовать их как активы с их содержимым ha sh
Проблема в том, что когда я запускаю ng build --prod
похоже, что это не работает, так как имя изображения актива по-прежнему angular -lo go .png в dist / assets.
Я чувствую, что есть что-то, чего я не понимаю в том, как Webpack работает. Что мне не хватает?