镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

build does not take into account folders when dealing with svg #12186

Description

@sydneyhenrard

Bug Report or Feature Request (mark with an x)

- [ X] bug report -> please search issues before submitting
- [ ] feature request

Command (mark with an x)

- [ ] new
- [ X] build
- [ X] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [ ] update
- [ ] lint
- [ ] xi18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

Versions

Windows 10

C:\Users\Owner
λ node --version
v8.11.1

C:\Users\Owner
λ npm --version
5.3.0

C:\Users\Owner
λ ng --version

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


Angular CLI: 6.1.1
Node: 8.11.1
OS: win32 x64
Angular:
...

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.7.1
@angular-devkit/core         0.7.1
@angular-devkit/schematics   0.7.1
@schematics/angular          0.7.1
@schematics/update           0.7.1
rxjs                         6.2.2
typescript                   2.7.2

Repro steps

ng new bug-so
cd bug-so
npm install flag-icon-css

In angular.json, I added the CSS:

        "styles": [
          "src/styles.css",
          "node_modules/flag-icon-css/css/flag-icon.min.css"
        ],

In app.component.html

<div style="padding: 5em">
  <span class="flag-icon flag-icon-es" style="border: 1px solid black"></span><br/>
  <span class="flag-icon flag-icon-fr" style="border: 1px solid black"></span><br/>
</div>

Run the app

ng serve

The log given by the failure

N/A

Desired functionality

The spanish flag is interpreted as:

.flag-icon-es {
    background-image: url(es.svg);
}

because the size of es.svg is more than 10KB. The issue is that the library has several es.svg files. In my case this is not the one referenced by the CSS.

k:\home\projects\stable\playground\angular\experiment (master -> origin)
λ dir node_modules\flag-icon-css\flags\1x1\es.svg
 Volume in drive K is New Volume
 Volume Serial Number is 92EC-8912

 Directory of k:\home\projects\stable\playground\angular\experiment\node_modules\flag-icon-css\flags\1x1

09/06/2018  08:04 AM            12,214 es.svg
               1 File(s)         12,214 bytes
               0 Dir(s)  47,793,385,472 bytes free

k:\home\projects\stable\playground\angular\experiment (master -> origin)
λ dir node_modules\flag-icon-css\flags\4x3\es.svg
 Volume in drive K is New Volume
 Volume Serial Number is 92EC-8912

 Directory of k:\home\projects\stable\playground\angular\experiment\node_modules\flag-icon-css\flags\4x3

02/22/2018  04:19 PM           145,196 es.svg
               1 File(s)        145,196 bytes
               0 Dir(s)  47,793,385,472 bytes free

After the ng build command, the dist folder selects the first es.svg and not both.

k:\home\projects\stable\playground\angular\experiment (master -> origin)
λ dir dist\experiment\es.svg
 Volume in drive K is New Volume
 Volume Serial Number is 92EC-8912

 Directory of k:\home\projects\stable\playground\angular\experiment\dist\experiment

09/06/2018  11:14 AM            12,214 es.svg
               1 File(s)         12,214 bytes
               0 Dir(s)  47,793,385,472 bytes free

Mention any other details that might be useful

You see visually the issue at https://stackoverflow.com/questions/52192974/angular-data-urls-processing/52194037

Activity

  1. added this to the needsTriage milestone on Sep 6, 2018
  2. filipesilva commented on Sep 7, 2018

    @filipesilva
    Contributor

    Had a look and can confirm that I see the 1x1 (square) ES flag instead of the 4x3 (rectangular) one, while the source CSS rule should load the 4x3 one:

    .flag-icon-es {
      background-image: url(../flags/4x3/es.svg);
    }
    

    I think this is because of bad/missing duplicate handling in our CSS pipeline.

  3. added
    freq1: lowOnly reported by a handful of users who observe it rarely
    and removed
    needs: investigationRequires some digging to determine if action is needed
    on Sep 7, 2018
  4. modified the milestones: needsTriage, Backlog on Sep 7, 2018
  5. alan-agius4 commented on Sep 7, 2018

    @alan-agius4
    Collaborator

    @filipesilva This is due to


    we can add [path] or something similar but it will be a breaking change as the output structure won't be flat anymore.

  6. jzahka commented on Oct 25, 2018

    @jzahka

    This is an issue for me too. I'm using ag-grid and the only way (without ejecting webpack config) is to have multiple folders of icons, named the same but with different colors.

    e.g. I have light and dark folders
    url(./material-icons-dark/menu.svg)
    url(./material-icons-light/menu.svg)

    In previous version of cli (6.1.2), these svg icons were inlined which worked.
    With cli 7.0, they are not inlined and only one of the two icons is output in the dist folder.

    Here's a reference to the ag grid icon theme issue ag-grid/ag-grid#2151

    Hoping to show this issue might have a higher frequency than as tagged.

  7. clydin commented on Oct 25, 2018

    @clydin
    Member

    You can set outputHashing to media. This was the default in the past and will prevent identically named files from overwriting each other (unless the content is identical which is actually favorable).

  8. maks-humeniuk commented on Jan 22, 2021

    @maks-humeniuk

    I don't see how comments here resolve #19850, which was closed as duplicate of this, while it's only a special case of #19850.

  9. alan-agius4 commented on Jan 22, 2021

    @alan-agius4
    Collaborator

    I don't see how comments here resolve #19850, which was closed as duplicate of this, while it's only a special case of #19850.

    Kindly see #12186 (comment) for a workaround.

  10. maks-humeniuk commented on Jan 22, 2021

    @maks-humeniuk

    I don't see how comments here resolve #19850, which was closed as duplicate of this, while it's only a special case of #19850.

    Kindly see #12186 (comment) for a workaround.

    How can I set outputHashing to media for ng serve? I don't want to run ng serve --prod.

  11. alan-agius4 commented on Jan 22, 2021

    @alan-agius4
    Collaborator

    You can set any option, in the options section.

    "build": {
        "builder": "@angular-devkit/build-angular:browser",
        "options": {
           ...
          "outputHashing": "media"
        },
        "configurations": {
          "production": {
              ...
          }
        }
      },
  12. maks-humeniuk commented on Jan 25, 2021

    @maks-humeniuk

    It doesn't work there, at least for ng serve. However, it applies for ng serve --prod, which I didn't want to use. But even this doesn't help. I'm receiving this in console.

    Warning: 'outputHashing' option is disabled when using the dev-server.
    ...
    Warning: Conflict: Multiple assets emit different content to the same filename logo.png
    

    I also tried to set it in serve options, but it's not allowed there.

    image

  13. added 2 commits that reference this issue on Jan 28, 2021
    a86ea3f
    2795517
  14. angular-automatic-lock-bot commented on Feb 28, 2021

    @angular-automatic-lock-bot

    This issue has been automatically locked due to inactivity.
    Please file a new issue if you are encountering a similar or related problem.

    Read more about our automatic conversation locking policy.

    This action has been performed automatically by a bot.

  15. locked and limited conversation to collaborators on Feb 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions