1 | const { join, resolve } = require('path')
|
2 | const { ensureTemplateFile } = require('./utils')
|
3 |
|
4 | module.exports = async function (moduleOptions) {
|
5 | const options = {
|
6 | configPath: 'tailwind.config.js',
|
7 | cssPath: join(this.options.dir.assets, 'css', 'tailwind.css'),
|
8 | exposeConfig: false,
|
9 | ...this.options.tailwindcss,
|
10 | ...moduleOptions
|
11 | }
|
12 |
|
13 | const configPath = this.nuxt.resolver.resolveAlias(options.configPath)
|
14 | const cssPath = this.nuxt.resolver.resolveAlias(options.cssPath)
|
15 |
|
16 | |
17 |
|
18 |
|
19 |
|
20 |
|
21 | await ensureTemplateFile(this.options.srcDir, 'tailwind.config.js', configPath)
|
22 | const tailwindCSSExists = await ensureTemplateFile(this.options.srcDir, 'tailwind.css', cssPath)
|
23 |
|
24 |
|
25 | if (tailwindCSSExists) {
|
26 | this.options.css.unshift(cssPath)
|
27 | }
|
28 |
|
29 |
|
30 | this.nuxt.hook('build:before', () => {
|
31 |
|
32 |
|
33 | if (!this.options.dev && !process.env.NODE_ENV) {
|
34 | process.env.NODE_ENV = 'production'
|
35 | }
|
36 | |
37 |
|
38 |
|
39 | const { postcss } = this.options.build
|
40 |
|
41 | postcss.preset.stage = 1
|
42 | postcss.plugins = postcss.plugins || {}
|
43 |
|
44 |
|
45 | if (Array.isArray(postcss.plugins)) {
|
46 | postcss.plugins.push(require('tailwindcss')(configPath))
|
47 | } else if (typeof postcss.plugins === 'object') {
|
48 | postcss.plugins.tailwindcss = postcss.plugins.tailwindcss || configPath
|
49 | }
|
50 |
|
51 | |
52 |
|
53 |
|
54 |
|
55 | if (options.exposeConfig) {
|
56 |
|
57 | const tailwindConfig = require(configPath)
|
58 | const resolveConfig = require('tailwindcss/resolveConfig')
|
59 | const resolvedConfig = resolveConfig(tailwindConfig)
|
60 |
|
61 |
|
62 | this.addTemplate({
|
63 | src: resolve(__dirname, 'templates/tailwind.config.json'),
|
64 | fileName: 'tailwind.config.json',
|
65 | options: { config: resolvedConfig }
|
66 | })
|
67 |
|
68 |
|
69 | this.options.alias['~tailwind.config'] =
|
70 | resolve(this.options.buildDir, 'tailwind.config.json')
|
71 |
|
72 |
|
73 | const { cacheGroups } = this.options.build.optimization.splitChunks
|
74 | cacheGroups.tailwindConfig = {
|
75 | test: /tailwind\.config/,
|
76 | chunks: 'all',
|
77 | priority: 10,
|
78 | name: true
|
79 | }
|
80 | }
|
81 | })
|
82 | }
|
83 |
|
84 | module.exports.meta = require('../package.json')
|