Когда приложение Angular разрабатывается локально, фоновый стиль CSS имеет значение /assets/banner.png
, как показано здесь:
.classname {
background-image: url(/assets/banner.png);
}
Когда приложение развернуто, правильный путь в среде сервера:
background-image: url(/server/assets/banner.png);
Как мне указать Angular добавлять к путям изображений /server
?
Прямо сейчас я делаю несколько операторов sed
для файла index.html
, и это работает. Подумал, что, возможно, есть лучший способ, чем просто sed
все переделать.
используйте background-image: url(./assets/banner.png);
или background-image: url(assets/banner.png);
. Посмотрите, что если вы добавите '/' Angular поиск в «your-dominio.com» и не примете во внимание «base href»,
@amphetamachin это жестко закодированный путь к изображению в обычном файле CSS. Использование относительного пути background-image: url(./assets/banner.png);
приводит к ошибке компиляции.
@Eliseo, используя относительный путь, приводит к ошибке компиляции Angular.
@sanjihan, я сделал небольшой stackblitz и похоже работа :(
@Eliseo Спасибо за комментарий. Я нашел проблему. У меня моё окружение url(/assets/banner.png)
работает. url(assets/banner.png)
или url(./assets/banner.png)
— ошибка компиляции. Я решил, что мне нужно добавить к пути src
, как в url(src/assets/banner.png)
. Теперь это работает. url(./src/assets/banner.png)
также является ошибкой компиляции. Спасибо всем.
@Eliseo, я был слишком быстр... Хотя url(src/assets/banner.png)
компилируется, это приводит к неправильному пути на сервере.
В angular.json вы можете настроить ресурсы, см. ссылку . «Вход» (где у вас есть «активы» (могут находиться в разных папках) и «выход» (где создаются все ресурсы). По дефекту он создается в папке «Ресурсы» в том же каталоге, что и ваш index.html. Это причина использования «относительных» путей.
Я знаю, что это может показаться излишним, но это может быть полезно для других целей, например для настройки среды, которую вы планируете использовать. Проделав это несколько раз, я создал простой скрипт, который поможет вам в этом. Я также предполагаю, что вы также хотите динамически генерировать окружения.
Этот скрипт может генерировать необходимые окружения, и вы можете запустить его в процессе сборки.
Ниже приведены шаги для достижения этой цели.
generate-environment.js
, скрипт
const { writeFile } = require('fs');
require('dotenv').config();
const isProduction = process.env['DEPLOYMENT_ENV'] === 'prod';
const assetBaseUrl = isProduction ? '/server' : '';
const environmentFileContent = `
export const environment = {
production: ${isProduction},
assetBaseUrl: "${assetBaseUrl}"
};
`;
writeFile('./src/environments/environment.ts', environmentFileContent, function (err) {
if (err) {
console.info(err);
} else {
console.info('Environment file created successfully.');
}
});
import { Component, OnInit } from '@angular/core';
import { environment } from '../environments/environment';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
backgroundImageUrl: string;
ngOnInit() {
this.backgroundImageUrl = `${environment.assetBaseUrl}/assets/banner.png`;
}
}
<div [ngStyle] = "{'background-image': 'url(' + backgroundImageUrl + ')'}">
<!-- Your content here -->
</div>
package.json
файл."scripts": {
"prebuild": "node generate-environment.js",
"build": "ng build"
}
Выполняя эти шаги, вы гарантируете, что конфигурация среды динамически генерируется и правильно используется в вашем приложении Angular в процессе сборки.
Я чувствую, что это проще: не добавлять /
к URL-адресу.
Привет @Eliseo. Я согласен с тобой, я хотел предложить это, но у автора был конкретный вопрос, поэтому и дал ответ.
@DerekRoberts Спасибо за предложение. Это определенно сработает.
Как это генерируется? Если это таблица стилей SASS, пробовали ли вы указать относительный путь к изображению?