Skip to content

Commit

Permalink
Hash both pitch and main loader for server CSS imports (#44063)
Browse files Browse the repository at this point in the history
Co-authored-by: Jiachi Liu <inbox@huozhi.im>

This should solve the problem that CSS hash happens before PostCSS
loaders.

## Bug

- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Feature

- [ ] Implements an existing feature request or RFC. Make sure the
feature request has been accepted for implementation before opening a
PR.
- [ ] Related issues linked using `fixes #number`
- [ ]
[e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs)
tests added
- [ ] Documentation added
- [ ] Telemetry added. In case of a feature if it's used or not.
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Documentation / Examples

- [ ] Make sure the linting passes by running `pnpm build && pnpm lint`
- [ ] The "examples guidelines" are followed from [our contributing
doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)

Co-authored-by: Jiachi Liu <inbox@huozhi.im>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
  • Loading branch information
3 people committed Dec 15, 2022
1 parent 327634e commit 64d3ba5
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions packages/next/build/webpack/loaders/next-flight-css-dev-loader.ts
Expand Up @@ -4,12 +4,16 @@
* inside a comment.
*/

import crypto from 'crypto'

export function pitch(this: any) {
if (process.env.NODE_ENV !== 'production') {
const content = this.fs.readFileSync(this.resourcePath)
this.data.__checksum = (
typeof content === 'string' ? Buffer.from(content) : content
).toString('hex')
this.data.__checksum = crypto
.createHash('sha256')
.update(typeof content === 'string' ? Buffer.from(content) : content)
.digest()
.toString('hex')
}
}

Expand All @@ -19,15 +23,23 @@ const NextServerCSSLoader = function (this: any, content: string) {
// Only add the checksum during development.
if (process.env.NODE_ENV !== 'production') {
const isCSSModule = this.resourcePath.match(/\.module\.(css|sass|scss)$/)
const checksum = crypto
.createHash('sha256')
.update(
this.data.__checksum +
(typeof content === 'string' ? Buffer.from(content) : content)
)
.digest()
.toString('hex')
.substring(0, 12)

if (isCSSModule) {
return (
content +
'\nmodule.exports.__checksum = ' +
JSON.stringify(this.data.__checksum)
content + '\nmodule.exports.__checksum = ' + JSON.stringify(checksum)
)
}

return `export default ${JSON.stringify(this.data.__checksum)}`
return `export default ${JSON.stringify(checksum)}`
}

return content
Expand Down

0 comments on commit 64d3ba5

Please sign in to comment.