Angular 7, SVG и Sass, как установить относительный путь - PullRequest
0 голосов
/ 03 декабря 2018

Привет, мы сейчас пытаемся обновить приложение Angular 6 до Angular 7. Но у нас есть одна проблема.В здании Angular 6 используется «ng build».Включает svg в файл css следующим образом:

    background: url('data:image/svg+xml,<%3Fxml version%3D"1.0" encoding%3D"utf-8"%3F>...');

}

Но после перехода на Angular 7 svg перемещается в папку dest и путь задается следующим образом:

    background-image: url('zoom-in.svg');

Другие активы не настроены на это.Наше решение имеет другую структуру, поэтому нам нужно либо иметь его, как это было в Angular 6, либо не иметь копию перемещения и изменять пути файлов svg в нашей css.

Так что естьустановка в cli, чтобы отключить обработку файлов SVG, чтобы мы могли указать относительные пути, которые мы используем для других ресурсов в решении?

[править] Я обнаружил, что код, который устанавливает пути, не является загрузчиком файлов, как я думал изначально.Я попытался обновить i, используя ngx-build-plus , ведь это инструмент, позволяющий переопределить настройки веб-пакета в Angular.

После того, как я покопался в коде cli, я обнаружил, что postcssPluginCreator возвращает плагин PostcssCliResources, который принимает имя файла, здесь я могу изменить сгенерированные пути.Я пытался использовать [путь], чтобы получить реальные пути, но это так и не закончилось.Но я мог бы установить что-то еще, например, имя файла: test/[name].[ext], и это сработало.

Это было немного странно для нас, так как мне пришлось переопределить / создать функцию postcssPluginCreator и заставить ее использовать веб-пакет.

В итоге мы настроили целевую папку cli для соответствияназвание маршрута страницы MVC.

Я надеюсь, что команда angular cli, по крайней мере, позволит нам добавить часть пути в качестве параметра в файле angular.json.

Код не использовать, но показывает, что я пытался:

import {
     PostcssCliResources,
     RawCssLoader,
     RemoveHashPlugin,
     SuppressExtractedTextChunksWebpackPlugin,
   } from "../node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/webpack.js";

const postcssPluginCreator = function (loader: any) {
     return [
       postcssImports({
         resolve: (url: string) => url.startsWith('~') ? url.substr(1) : url,
         load: (filename: string) => {
           return new Promise<string>((resolve, reject) => {
             loader.fs.readFile(filename, (err: Error, data: any) => {
               if (err) {
                 reject(err);
                 return;
               }

               const content = data.toString();
               resolve(content);
             });
           });
         },
       }),
       PostcssCliResources({
         baseHref:'',
         deployUrl:'',
         loader,
         filename: `test/[name].[ext]`, // here is the path set.
       }),
       autoprefixer({ grid: true }),
     ];
   };

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Обновление к проблеме https://github.com/angular/angular-cli/issues/6315. Связано с изменением, когда они добавили новую опцию, называемую "resourcesOutputPath".Это добавляет путь к ресурсам, так что все ресурсы помещаются в подпуть / папку.Вы не можете получить то же самое, что и с загрузчиком файлов в веб-пакете с флагом [path], но по крайней мере можно разделить исходный код и ресурсы.

Чтобы использовать его, мне пришлось обновить мою версию cli до 7.2.3 (я также обновил scheatics-cli до 0.12.3, но не знаю, нужно ли это)

ЗдесьВот пример того, как его использовать:

 "architect": {
    "build": {
      "builder": "@angular-devkit/build-angular:browser",
      "options": {
        "outputPath": "Scripts/clidest",
        "index": "app/index.html",
        "main": "app/startUp.ts",
        "tsConfig": "app/tsconfig.app.json",
        "polyfills": "app/polyfills.ts",
        "resourcesOutputPath": "resources",
...
0 голосов
/ 11 декабря 2018

Похоже, это по замыслу: https://github.com/angular/angular-cli/issues/12731#issuecomment-432621166 (но мне до сих пор не ясно, почему это так плохо, поэтому я задал вопрос в https://github.com/angular/angular-cli/issues/6315,, вы можете комментировать и подписываться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...