1 | import { useLogger, defineNuxtModule, addVitePlugin, addWebpackPlugin } from '@nuxt/kit';
|
2 | import vitePluginStylelint from 'vite-plugin-stylelint';
|
3 | import StylelintWebpackPlugin from 'stylelint-webpack-plugin';
|
4 | import { relative } from 'pathe';
|
5 | import { watch } from 'chokidar';
|
6 |
|
7 | const name = "@nuxtjs/stylelint-module";
|
8 | const version = "5.1.0";
|
9 |
|
10 | const logger = useLogger("nuxt:stylelint");
|
11 | const module = defineNuxtModule({
|
12 | meta: {
|
13 | name,
|
14 | version,
|
15 | configKey: "stylelint",
|
16 | compatibility: {
|
17 | bridge: true
|
18 | }
|
19 | },
|
20 | defaults: (nuxt) => ({
|
21 | cache: true,
|
22 | include: [`${nuxt.options.srcDir}/**/*.{css,scss,sass,less,styl,vue}`],
|
23 | exclude: ["**/node_modules/**", "virtual:", nuxt.options.buildDir],
|
24 | stylelintPath: "stylelint",
|
25 | formatter: "string",
|
26 | lintOnStart: true,
|
27 | emitWarning: true,
|
28 | emitError: true,
|
29 | failOnWarning: false,
|
30 | failOnError: true
|
31 | }),
|
32 | setup(options, nuxt) {
|
33 | if (!nuxt.options.dev) {
|
34 | return;
|
35 | }
|
36 | const configPaths = [
|
37 | ".stylelintignore",
|
38 | ".stylelintrc",
|
39 | ".stylelintrc.json",
|
40 | ".stylelintrc.yaml",
|
41 | ".stylelintrc.yml",
|
42 | ".stylelintrc.js",
|
43 | "stylelint.config.js"
|
44 | ].map((path) => relative(nuxt.options.rootDir, path));
|
45 | if (nuxt.options.watch) {
|
46 | nuxt.options.watch.push(...configPaths);
|
47 | } else {
|
48 | const watcher = watch(configPaths, { depth: 0 }).on("change", (path) => {
|
49 | logger.info(`Eslint config changed: ${path}`);
|
50 | logger.warn("Please restart the Nuxt server to apply changes or upgrade to latest Nuxt for automatic restart.");
|
51 | });
|
52 | nuxt.hook("close", () => watcher.close());
|
53 | }
|
54 | addVitePlugin(vitePluginStylelint(options), { server: false });
|
55 | const webpackOptions = {
|
56 | ...options,
|
57 | context: nuxt.options.srcDir,
|
58 | files: options.include,
|
59 | lintDirtyModulesOnly: !options.lintOnStart
|
60 | };
|
61 | delete webpackOptions.include;
|
62 | delete webpackOptions.lintOnStart;
|
63 | addWebpackPlugin(new StylelintWebpackPlugin(webpackOptions), { server: false });
|
64 | }
|
65 | });
|
66 |
|
67 | export { module as default };
|