Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lazy loaded styles are still hashed #11704

Closed
dpreindl opened this issue Jul 30, 2018 · 4 comments · Fixed by #11981
Closed

Lazy loaded styles are still hashed #11704

dpreindl opened this issue Jul 30, 2018 · 4 comments · Fixed by #11981

Comments

@dpreindl
Copy link

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
- [ ] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [ ] update
- [ ] lint
- [ ] xi18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

Versions

$ node --version
v8.9.0
$ npm --version
6.0.1

Angular CLI: 6.1.1
Node: 8.9.0
OS: win32 x64
Angular: 6.1.0
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package Version
@angular-devkit/architect 0.7.1
@angular-devkit/build-angular 0.7.1
@angular-devkit/build-optimizer 0.7.1
@angular-devkit/build-webpack 0.7.1
@angular-devkit/core 0.7.1
@angular-devkit/schematics 0.7.1
@angular/cli 6.1.1
@ngtools/webpack 6.1.1
@schematics/angular 0.7.1
@schematics/update 0.7.1
rxjs 6.2.2
typescript 2.7.2
webpack 4.9.2

Repro steps

  1. ng new lazyscss --style scss
  2. Adjust angular.json to lazy load styles.sccs ( "styles": [{"input": "src/styles.scss", "lazy":true} ],)
  3. ng build --prod
  4. The build contains the hashed version of styles.scss

The log given by the failure

None.

Desired functionality

Based on the pull request (#11491) the hashing should be disabled for lazy loaded styles. Therefore a styles.css is expected in the dist folder (instead a styles.<hash>.css is included).
This should have been fixed with issue #11235 / pull request #11491.

Mention any other details that might be useful

It seems that the problem is caused by passing the name (e.g. "styles") in styles.ts#getStylesConfig instead of the ID (which isn't even present at the time):


extraPlugins.push(new RemoveHashPlugin({ chunkIds, hashFormat}));

Later, in the RemoveHashPlugin#apply the name is then compared to the actual ID:


if (chunkId && this.options.chunkIds.includes(chunkId)) {

Changing remove-hash-plugin.ts#L29 to use data.chunk.name instead of data.chunk.id resolved the issue in our tests.

@dashkan
Copy link

dashkan commented Aug 17, 2018

Looks like the problem is with optimization flag. When enabled the chunk id changes to a numeric value and the plugin cannot find chunkId in this.options.chunkIds.

I am going to disable optimization until there is a proper fix.

I did find the following handles both states of optimization flag:

                const chunkId = data.chunk && data.chunk.id;
                const chunkName = data.chunk && data.chunk.name;
                if ((chunkId || chunkName) && (this.options.chunkIds.includes(chunkId) || this.options.chunkIds.includes(chunkName))) {
                    // Replace hash formats with empty strings.
                    return path
                        .replace(this.options.hashFormat.chunk, '')
                        .replace(this.options.hashFormat.extract, '');
                }
                return path;

@xmlking
Copy link

xmlking commented Aug 19, 2018

I also opened similar issue
#11772

@alan-agius4
Copy link
Collaborator

Thanks @dashkan and @dpreindl for taking your time into debugging this and providing your detailed analysis. I'll be looking into solving this pretty soon.

@angular-automatic-lock-bot
Copy link

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.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Sep 8, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants