UNPKG

2.09 kBJavaScriptView Raw
1import { useLogger, defineNuxtModule, addVitePlugin, addWebpackPlugin } from '@nuxt/kit';
2import vitePluginStylelint from 'vite-plugin-stylelint';
3import StylelintWebpackPlugin from 'stylelint-webpack-plugin';
4import { relative } from 'pathe';
5import { watch } from 'chokidar';
6
7const name = "@nuxtjs/stylelint-module";
8const version = "5.1.0";
9
10const logger = useLogger("nuxt:stylelint");
11const 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
67export { module as default };