Skip to content

Commit b9a5b76

Browse files
authored
Merge pull request #1655 from tailwindcss/purge-improvements
Purge integration improvements
2 parents 3a53a8c + 77d3f75 commit b9a5b76

File tree

4 files changed

+77
-2
lines changed

4 files changed

+77
-2
lines changed

__tests__/purgeUnusedStyles.test.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,51 @@ test('purges unused classes', () => {
6868
})
6969
})
7070

71+
test('does not purge components', () => {
72+
const OLD_NODE_ENV = process.env.NODE_ENV
73+
process.env.NODE_ENV = 'production'
74+
const inputPath = path.resolve(`${__dirname}/fixtures/tailwind-input.css`)
75+
const input = fs.readFileSync(inputPath, 'utf8')
76+
77+
return postcss([
78+
tailwind({
79+
...config,
80+
purge: [path.resolve(`${__dirname}/fixtures/**/*.html`)],
81+
}),
82+
])
83+
.process(input, { from: inputPath })
84+
.then(result => {
85+
process.env.NODE_ENV = OLD_NODE_ENV
86+
87+
expect(result.css).toContain('.container')
88+
89+
expect(result.css).not.toContain('.bg-red-600')
90+
expect(result.css).not.toContain('.w-1\\/3')
91+
expect(result.css).not.toContain('.flex')
92+
expect(result.css).not.toContain('.font-sans')
93+
expect(result.css).not.toContain('.text-right')
94+
expect(result.css).not.toContain('.px-4')
95+
expect(result.css).not.toContain('.h-full')
96+
97+
expect(result.css).toContain('.bg-red-500')
98+
expect(result.css).toContain('.md\\:bg-blue-300')
99+
expect(result.css).toContain('.w-1\\/2')
100+
expect(result.css).toContain('.block')
101+
expect(result.css).toContain('.md\\:flow-root')
102+
expect(result.css).toContain('.h-screen')
103+
expect(result.css).toContain('.min-h-\\(screen-4\\)')
104+
expect(result.css).toContain('.bg-black\\!')
105+
expect(result.css).toContain('.font-\\%\\#\\$\\@')
106+
expect(result.css).toContain('.w-\\(1\\/2\\+8\\)')
107+
expect(result.css).toContain('.inline-grid')
108+
expect(result.css).toContain('.grid-cols-3')
109+
expect(result.css).toContain('.px-1\\.5')
110+
expect(result.css).toContain('.col-span-2')
111+
expect(result.css).toContain('.col-span-1')
112+
expect(result.css).toContain('.text-center')
113+
})
114+
})
115+
71116
test('does not purge except in production', () => {
72117
const OLD_NODE_ENV = process.env.NODE_ENV
73118
process.env.NODE_ENV = 'development'
@@ -92,6 +137,30 @@ test('does not purge except in production', () => {
92137
})
93138
})
94139

140+
test('does not purge if the array is empty', () => {
141+
const OLD_NODE_ENV = process.env.NODE_ENV
142+
process.env.NODE_ENV = 'production'
143+
const inputPath = path.resolve(`${__dirname}/fixtures/tailwind-input.css`)
144+
const input = fs.readFileSync(inputPath, 'utf8')
145+
146+
return postcss([
147+
tailwind({
148+
...defaultConfig,
149+
purge: [],
150+
}),
151+
])
152+
.process(input, { from: inputPath })
153+
.then(result => {
154+
process.env.NODE_ENV = OLD_NODE_ENV
155+
const expected = fs.readFileSync(
156+
path.resolve(`${__dirname}/fixtures/tailwind-output.css`),
157+
'utf8'
158+
)
159+
160+
expect(result.css).toBe(expected)
161+
})
162+
})
163+
95164
test('purges outside of production if explicitly enabled', () => {
96165
const OLD_NODE_ENV = process.env.NODE_ENV
97166
process.env.NODE_ENV = 'development'

src/lib/purgeUnusedStyles.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ export default function purgeUnusedUtilities(config) {
2828
return removeTailwindComments
2929
}
3030

31+
// Skip if `purge: []` since that's part of the default config
32+
if (Array.isArray(config.purge) && config.purge.length === 0) {
33+
console.log('Skipping purge because no template paths provided...')
34+
return removeTailwindComments
35+
}
36+
3137
return postcss([
3238
function(css) {
3339
const mode = _.get(config, 'purge.mode', 'conservative')
@@ -38,12 +44,10 @@ export default function purgeUnusedUtilities(config) {
3844

3945
css.walkComments(comment => {
4046
switch (comment.text.trim()) {
41-
case 'tailwind start components':
4247
case 'tailwind start utilities':
4348
case 'tailwind start screens':
4449
comment.text = 'purgecss end ignore'
4550
break
46-
case 'tailwind end components':
4751
case 'tailwind end utilities':
4852
case 'tailwind end screens':
4953
comment.text = 'purgecss start ignore'

stubs/defaultConfig.stub.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module.exports = {
2+
purge: [],
23
prefix: '',
34
important: false,
45
separator: ':',

stubs/simpleConfig.stub.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module.exports = {
2+
purge: [],
23
theme: {
34
extend: {},
45
},

0 commit comments

Comments
 (0)