Skip to content

Commit 9989449

Browse files
committed
refactor: clean up sass setup
1 parent 7b3cd76 commit 9989449

File tree

3 files changed

+29
-25
lines changed

3 files changed

+29
-25
lines changed

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const vuetifyModule: Module<Options> = function (moduleOptions) {
2626
options.defaultAssets.icons && setupIcons.call(this, options.defaultAssets.icons)
2727
}
2828

29-
setupSass.call(this, options)
29+
setupSass.call(this, options.customVariables)
3030
setupBuild.call(this, options)
3131
})
3232
}

src/sass.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@ import { ModuleThis } from '@nuxt/types/config/module'
22
import dartSass from 'sass'
33
import { Options } from './options'
44

5-
export default function setupSass (this: ModuleThis, options: Pick<Options, 'customVariables'>) {
6-
// Ensure sass-loader@8 compatibility (https://github.com/webpack-contrib/sass-loader/releases/tag/v8.0.0)
7-
// Cause since loader options validation, this will fail: https://github.com/nuxt/nuxt.js/tree/c8ee9a660809e856c28d8678c6a632bbdd6ed00f/packages/config/src/config/build.js#L50
8-
delete this.options.build!.loaders.sass.indentedSyntax
5+
export default function setupSass (this: ModuleThis, customVariables: Options['customVariables']) {
6+
const { sass, scss } = this.options.build!.loaders
97

108
// Use Dart Sass
11-
this.options.build!.loaders.sass.implementation =
12-
this.options.build!.loaders.scss.implementation =
13-
dartSass
9+
sass.implementation = scss.implementation = dartSass
1410

15-
// Ensure it uses indented syntax for Sass files
16-
this.options.build!.loaders.sass.sassOptions = this.options.build!.loaders.sass.sassOptions || {}
17-
this.options.build!.loaders.sass.sassOptions.indentedSyntax = true
11+
// Ensure compatibility with Nuxt < 2.10 (i.e. before https://github.com/nuxt/nuxt.js/pull/6460)
12+
if (!sass.sassOptions) {
13+
delete sass.indentedSyntax
14+
sass.sassOptions = {
15+
indentedSyntax: true
16+
}
17+
}
1818

1919
// Custom variables
20-
if (options.customVariables && options.customVariables.length > 0) {
21-
const imports = options.customVariables.map(path => `@import '${path}'`).join('\n')
22-
this.options.build!.loaders.sass.prependData = [this.options.build!.loaders.sass.prependData, imports].join('\n')
20+
if (customVariables && customVariables.length > 0) {
21+
const imports = customVariables.map(path => `@import '${path}'`).join('\n')
22+
sass.prependData = [sass.prependData, imports].join('\n')
2323
}
2424
}

test/module.test.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const setupBuild = (options?: Options) => {
2424
}
2525
const setupFont = (options?: FontOptions) => _setupFont.call(nuxt.moduleContainer, options)
2626
const setupIcons = (preset?: IconPreset) => _setupIcons.call(nuxt.moduleContainer, preset)
27-
const setupSass = (options?: Options) => _setupSass.call(nuxt.moduleContainer, options)
27+
const setupSass = (customVariables?: Options['customVariables']) => _setupSass.call(nuxt.moduleContainer, customVariables)
2828

2929
beforeEach(async () => {
3030
nuxt = new Nuxt()
@@ -64,8 +64,10 @@ describe('setupFont', () => {
6464
}
6565
})
6666

67-
expect(nuxt.options.build.loaders.sass.prependData).toContain("$body-font-family: 'Montserrat', sans-serif")
68-
expect(nuxt.options.build.loaders.sass.prependData).toContain('$font-size-root: 20px')
67+
const { prependData } = nuxt.options.build.loaders.sass
68+
69+
expect(prependData).toContain("$body-font-family: 'Montserrat', sans-serif")
70+
expect(prependData).toContain('$font-size-root: 20px')
6971
})
7072
})
7173

@@ -84,18 +86,20 @@ describe('setupIcons', () => {
8486
describe('setupSass', () => {
8587
test('default', () => {
8688
delete nuxt.options.build.loaders.sass.sassOptions
87-
setupSass(defaultOptions)
8889

89-
expect(nuxt.options.build.loaders.sass.indentedSyntax).toBeUndefined()
90-
expect(nuxt.options.build.loaders.sass.implementation).toEqual(dartSass)
91-
expect(nuxt.options.build.loaders.sass.sassOptions.indentedSyntax).toBe(true)
92-
expect(nuxt.options.build.loaders.scss.implementation).toEqual(dartSass)
90+
setupSass()
91+
92+
const { sass, scss } = nuxt.options.build.loaders
93+
94+
expect(sass.implementation).toEqual(dartSass)
95+
expect(scss.implementation).toEqual(dartSass)
96+
97+
expect(sass.indentedSyntax).toBeUndefined()
98+
expect(sass.sassOptions.indentedSyntax).toBe(true)
9399
})
94100

95101
test('customVariables', () => {
96-
setupSass({
97-
customVariables: ['/path/to/variables.scss']
98-
})
102+
setupSass(['/path/to/variables.scss'])
99103

100104
expect(nuxt.options.build.loaders.sass.prependData).toContain("@import '/path/to/variables.scss'")
101105
})

0 commit comments

Comments
 (0)