ಕನ್ನಡ

ಟೈಲ್‌ವಿಂಡ್ CSS ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್‌ಗೆ ಒಂದು ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ. ಇದು ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್ ಉತ್ಪಾದನೆ, ಪ್ರೊಡಕ್ಷನ್ ಆಪ್ಟಿಮೈಸೇಶನ್, ಮತ್ತು ನಿಮ್ಮ ಸ್ಟೈಲ್‌ಶೀಟ್‌ಗಳನ್ನು ರಕ್ಷಿಸಲು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಒಳಗೊಂಡಿದೆ.

ಟೈಲ್‌ವಿಂಡ್ CSS ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್: ಪ್ರೊಡಕ್ಷನ್‌ಗಾಗಿ ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್ ಸಂರಕ್ಷಣೆ

ಟೈಲ್‌ವಿಂಡ್ CSS ಒಂದು ಯುಟಿಲಿಟಿ-ಫಸ್ಟ್ CSS ಫ್ರೇಮ್‌ವರ್ಕ್ ಆಗಿದ್ದು, ಇದು ನಿಮ್ಮ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಟೈಲ್ ಮಾಡಲು ಮೊದಲೇ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಕ್ಲಾಸ್‌ಗಳ ದೊಡ್ಡ ಶ್ರೇಣಿಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಅದರ ಯುಟಿಲಿಟಿ-ಫಸ್ಟ್ ವಿಧಾನವು ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ಅಪ್ರತಿಮ ನಮ್ಯತೆ ಮತ್ತು ವೇಗವನ್ನು ನೀಡುತ್ತದೆಯಾದರೂ, ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸದಿದ್ದರೆ ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ದೊಡ್ಡ CSS ಫೈಲ್‌ಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಇಲ್ಲಿಯೇ ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ (ವೈಟ್‌ಲಿಸ್ಟಿಂಗ್ ಎಂದೂ ಕರೆಯಲ್ಪಡುತ್ತದೆ) ಬರುತ್ತದೆ. ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ಎಂದರೆ ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿ ನೀವು ಯಾವ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಬಳಸಲು ಉದ್ದೇಶಿಸಿದ್ದೀರಿ ಎಂದು ಟೈಲ್‌ವಿಂಡ್ CSSಗೆ ಸ್ಪಷ್ಟವಾಗಿ ಹೇಳುವ ಪ್ರಕ್ರಿಯೆ, ಇದು ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಎಲ್ಲಾ ಇತರ ಬಳಕೆಯಾಗದ ಕ್ಲಾಸ್‌ಗಳನ್ನು ತಿರಸ್ಕರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಇದು ನಿಮ್ಮ CSS ಫೈಲ್ ಗಾತ್ರವನ್ನು ನಾಟಕೀಯವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಪುಟ ಲೋಡ್ ಸಮಯ ವೇಗವಾಗುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಸುಧಾರಿಸುತ್ತದೆ.

ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್‌ನ ಅಗತ್ಯವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು

ಟೈಲ್‌ವಿಂಡ್ CSS ಡಿಫಾಲ್ಟ್ ಆಗಿ ಸಾವಿರಾರು CSS ಕ್ಲಾಸ್‌ಗಳನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ನೀವು ಈ ಎಲ್ಲಾ ಕ್ಲಾಸ್‌ಗಳನ್ನು ನಿಮ್ಮ ಪ್ರೊಡಕ್ಷನ್ ಬಿಲ್ಡ್‌ನಲ್ಲಿ ಸೇರಿಸಿದರೆ, ನೀವು ಅವುಗಳಲ್ಲಿ ಕೇವಲ ಒಂದು ಸಣ್ಣ ಭಾಗವನ್ನು ಬಳಸಿದರೂ ಸಹ, ನಿಮ್ಮ CSS ಫೈಲ್ ಅನಗತ್ಯವಾಗಿ ದೊಡ್ಡದಾಗಿರುತ್ತದೆ. ಇದು ನಿಮ್ಮ ವೆಬ್‌ಸೈಟ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಮೇಲೆ ಹಲವು ವಿಧಗಳಲ್ಲಿ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ:

ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ಈ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುತ್ತದೆ, ಕೇವಲ ನೀವು ಬಳಸುವ ಕ್ಲಾಸ್‌ಗಳನ್ನು ಮಾತ್ರ ಆಯ್ಕೆ ಮಾಡಿ ಸೇರಿಸುತ್ತದೆ, ಇದರ ಪರಿಣಾಮವಾಗಿ ಗಮನಾರ್ಹವಾಗಿ ಚಿಕ್ಕದಾದ ಮತ್ತು ಹೆಚ್ಚು ದಕ್ಷವಾದ CSS ಫೈಲ್ ಲಭಿಸುತ್ತದೆ. ಆಧುನಿಕ ವೆಬ್ ಅಭಿವೃದ್ಧಿ ಪದ್ಧತಿಗಳು ಕಡಿಮೆ ಮತ್ತು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಿದ ಕೋಡ್ ಅನ್ನು ಬಯಸುತ್ತವೆ. ಟೈಲ್‌ವಿಂಡ್ CSS ನೊಂದಿಗೆ ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ಕೇವಲ ಉತ್ತಮ ಅಭ್ಯಾಸವಲ್ಲ; ಇದು ಕಾರ್ಯಕ್ಷಮತೆಯುಳ್ಳ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತಲುಪಿಸಲು ಒಂದು ಅವಶ್ಯಕತೆಯಾಗಿದೆ.

ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳ ಸವಾಲುಗಳು

ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ನಿರ್ಣಾಯಕವಾಗಿದ್ದರೂ, ನೀವು ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಬಳಸುವಾಗ ಇದು ಒಂದು ಸವಾಲನ್ನು ಒಡ್ಡುತ್ತದೆ. ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳು ರನ್‌ಟೈಮ್‌ನಲ್ಲಿ ರಚಿಸಲಾದ ಅಥವಾ ಮಾರ್ಪಡಿಸಲಾದವುಗಳಾಗಿವೆ, ಇವು ಸಾಮಾನ್ಯವಾಗಿ ಬಳಕೆದಾರರ ಇನ್‌ಪುಟ್, API ನಿಂದ ಪಡೆದ ಡೇಟಾ, ಅಥವಾ ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕೋಡ್‌ನಲ್ಲಿನ ಷರತ್ತುಬದ್ಧ ತರ್ಕವನ್ನು ಆಧರಿಸಿರುತ್ತವೆ. ಆರಂಭಿಕ ಟೈಲ್‌ವಿಂಡ್ CSS ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಈ ಕ್ಲಾಸ್‌ಗಳನ್ನು ಊಹಿಸುವುದು ಕಷ್ಟ, ಏಕೆಂದರೆ ಉಪಕರಣಗಳು ಆ ಕ್ಲಾಸ್‌ಗಳು ಬೇಕಾಗುತ್ತವೆ ಎಂದು 'ನೋಡಲು' ಸಾಧ್ಯವಿಲ್ಲ.

ಉದಾಹರಣೆಗೆ, ಬಳಕೆದಾರರ ಆದ್ಯತೆಗಳ ಆಧಾರದ ಮೇಲೆ ನೀವು ಡೈನಾಮಿಕ್ ಆಗಿ ಹಿನ್ನೆಲೆ ಬಣ್ಣಗಳನ್ನು ಅನ್ವಯಿಸುತ್ತಿರುವ ಸನ್ನಿವೇಶವನ್ನು ಪರಿಗಣಿಸಿ. ನೀವು ಬಣ್ಣದ ಆಯ್ಕೆಗಳ ಒಂದು ಸೆಟ್ ಅನ್ನು ಹೊಂದಿರಬಹುದು (ಉದಾ., `bg-red-500`, `bg-green-500`, `bg-blue-500`) ಮತ್ತು ಬಳಕೆದಾರರ ಆಯ್ಕೆಯ ಆಧಾರದ ಮೇಲೆ ಸೂಕ್ತವಾದ ಕ್ಲಾಸ್ ಅನ್ನು ಅನ್ವಯಿಸಲು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬಳಸಬಹುದು. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು ಸ್ಪಷ್ಟವಾಗಿ ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡದ ಹೊರತು ಟೈಲ್‌ವಿಂಡ್ CSS ಈ ಕ್ಲಾಸ್‌ಗಳನ್ನು ಅಂತಿಮ CSS ಫೈಲ್‌ನಲ್ಲಿ ಸೇರಿಸದಿರಬಹುದು.

ಮತ್ತೊಂದು ಸಾಮಾನ್ಯ ಉದಾಹರಣೆಯೆಂದರೆ, ಸಂಬಂಧಿತ ಸ್ಟೈಲ್‌ಗಳೊಂದಿಗೆ ಡೈನಾಮಿಕ್ ಆಗಿ ರಚಿಸಲಾದ ಕಂಟೆಂಟ್. ವಿವಿಧ ವಿಜೆಟ್‌ಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ, ಪ್ರತಿಯೊಂದೂ ಅದರ ಪ್ರಕಾರ ಅಥವಾ ಡೇಟಾ ಮೂಲದಿಂದ ನಿರ್ಧರಿಸಲ್ಪಟ್ಟ ಒಂದು ವಿಶಿಷ್ಟ ಶೈಲಿಯನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಪ್ರತಿ ವಿಜೆಟ್‌ಗೆ ಅನ್ವಯಿಸಲಾದ ನಿರ್ದಿಷ್ಟ ಟೈಲ್‌ವಿಂಡ್ CSS ಕ್ಲಾಸ್‌ಗಳು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿರುವ ಡೇಟಾವನ್ನು ಅವಲಂಬಿಸಿರಬಹುದು, ಇದರಿಂದಾಗಿ ಅವುಗಳನ್ನು ಮೊದಲೇ ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡುವುದು ಸವಾಲಿನದಾಗುತ್ತದೆ. ಇದು ಕಾಂಪೊನೆಂಟ್ ಲೈಬ್ರರಿಗಳಿಗೂ ಅನ್ವಯಿಸುತ್ತದೆ, ಅಲ್ಲಿ ಅಂತಿಮ ಬಳಕೆದಾರರು ಕೆಲವು CSS ಕ್ಲಾಸ್‌ಗಳನ್ನು ಬಳಸಬೇಕೆಂದು ನೀವು ಬಯಸುತ್ತೀರಿ.

ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡುವ ವಿಧಾನಗಳು

ಟೈಲ್‌ವಿಂಡ್ CSS ನಲ್ಲಿ ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಲು ಹಲವಾರು ತಂತ್ರಗಳಿವೆ. ಉತ್ತಮ ವಿಧಾನವು ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್‌ನ ಸಂಕೀರ್ಣತೆ ಮತ್ತು ಒಳಗೊಂಡಿರುವ ಡೈನಾಮಿಸಂನ ಮಟ್ಟವನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ.

1. `tailwind.config.js` ನಲ್ಲಿ `safelist` ಆಯ್ಕೆಯನ್ನು ಬಳಸುವುದು

ಅತ್ಯಂತ ಸರಳವಾದ ವಿಧಾನವೆಂದರೆ ನಿಮ್ಮ `tailwind.config.js` ಫೈಲ್‌ನಲ್ಲಿ `safelist` ಆಯ್ಕೆಯನ್ನು ಬಳಸುವುದು. ಈ ಆಯ್ಕೆಯು ಅಂತಿಮ CSS ಫೈಲ್‌ನಲ್ಲಿ ಯಾವಾಗಲೂ ಸೇರಿಸಬೇಕಾದ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  safelist: [
    'bg-red-500',
    'bg-green-500',
    'bg-blue-500',
    'text-xl',
    'font-bold',
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

ಅನುಕೂಲಗಳು:

ಅನಾನುಕೂಲಗಳು:

2. `safelist` ನಲ್ಲಿ ರೆಗ್ಯುಲರ್ ಎಕ್ಸ್‌ಪ್ರೆಶನ್‌ಗಳನ್ನು ಬಳಸುವುದು

ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಸನ್ನಿವೇಶಗಳಿಗಾಗಿ, ನೀವು `safelist` ಆಯ್ಕೆಯೊಳಗೆ ರೆಗ್ಯುಲರ್ ಎಕ್ಸ್‌ಪ್ರೆಶನ್‌ಗಳನ್ನು ಬಳಸಬಹುದು. ಇದು ಪ್ರತಿಯೊಂದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಪಟ್ಟಿ ಮಾಡುವ ಬದಲು, ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳ ಮಾದರಿಗಳನ್ನು ಹೊಂದಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  safelist: [
    /^bg-.*-500$/,
    /^text-./, // example for matching all text classes
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, `/^bg-.*-500$/` ಎಂಬ ರೆಗ್ಯುಲರ್ ಎಕ್ಸ್‌ಪ್ರೆಶನ್ `bg-` ನಿಂದ ಪ್ರಾರಂಭವಾಗುವ, ನಂತರ ಯಾವುದೇ ಅಕ್ಷರಗಳನ್ನು (`.*`) ಹೊಂದಿರುವ, ಮತ್ತು `-500` ನಿಂದ ಕೊನೆಗೊಳ್ಳುವ ಯಾವುದೇ ಕ್ಲಾಸ್ ನೇಮ್ ಅನ್ನು ಹೊಂದಿಸುತ್ತದೆ. ಇದು `bg-red-500`, `bg-green-500`, `bg-blue-500`, ಮತ್ತು `bg-mycustomcolor-500` ನಂತಹ ಕ್ಲಾಸ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.

ಅನುಕೂಲಗಳು:

ಅನಾನುಕೂಲಗಳು:

3. ಬಿಲ್ಡ್ ಸಮಯದಲ್ಲಿ ಡೈನಾಮಿಕ್ ಸೇಫ್‌ಲಿಸ್ಟ್ ಅನ್ನು ರಚಿಸುವುದು

ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳು ನಿಜವಾಗಿಯೂ ಅನಿರೀಕ್ಷಿತವಾಗಿರುವ ಹೆಚ್ಚು ಡೈನಾಮಿಕ್ ಸನ್ನಿವೇಶಗಳಿಗಾಗಿ, ನೀವು ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಡೈನಾಮಿಕ್ ಸೇಫ್‌ಲಿಸ್ಟ್ ಅನ್ನು ರಚಿಸಬಹುದು. ಇದು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಿ ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಗುರುತಿಸುವುದನ್ನು ಮತ್ತು ನಂತರ ಟೈಲ್‌ವಿಂಡ್ CSS ರನ್ ಆಗುವ ಮೊದಲು ಅವುಗಳನ್ನು `safelist` ಆಯ್ಕೆಗೆ ಸೇರಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.

ಈ ವಿಧಾನವು ಸಾಮಾನ್ಯವಾಗಿ ಬಿಲ್ಡ್ ಸ್ಕ್ರಿಪ್ಟ್ (ಉದಾ., Node.js ಸ್ಕ್ರಿಪ್ಟ್) ಅನ್ನು ಬಳಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ:

  1. ನಿಮ್ಮ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್, ಟೈಪ್‌ಸ್ಕ್ರಿಪ್ಟ್, ಅಥವಾ ಇತರ ಕೋಡ್ ಫೈಲ್‌ಗಳನ್ನು ಪಾರ್ಸ್ ಮಾಡುವುದು.
  2. ಸಂಭಾವ್ಯ ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಗುರುತಿಸುವುದು (ಉದಾ., ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ರಚಿಸುವ ಸ್ಟ್ರಿಂಗ್ ಇಂಟರ್‌ಪೋಲೇಶನ್ ಅಥವಾ ಷರತ್ತುಬದ್ಧ ತರ್ಕವನ್ನು ಹುಡುಕುವ ಮೂಲಕ).
  3. ಗುರುತಿಸಲಾದ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಒಳಗೊಂಡ `safelist` ಅರೇ ಅನ್ನು ರಚಿಸುವುದು.
  4. ರಚಿಸಲಾದ `safelist` ಅರೇಯೊಂದಿಗೆ ನಿಮ್ಮ `tailwind.config.js` ಫೈಲ್ ಅನ್ನು ನವೀಕರಿಸುವುದು.
  5. ಟೈಲ್‌ವಿಂಡ್ CSS ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ರನ್ ಮಾಡುವುದು.

ಇದು ಅತ್ಯಂತ ಸಂಕೀರ್ಣವಾದ ವಿಧಾನವಾಗಿದೆ, ಆದರೆ ಇದು ಹೆಚ್ಚು ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಹೆಚ್ಚಿನ ನಮ್ಯತೆ ಮತ್ತು ನಿಖರತೆಯನ್ನು ನೀಡುತ್ತದೆ. ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ ನಿಮ್ಮ ಕೋಡ್‌ಬೇಸ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಲು ನೀವು `esprima` ಅಥವಾ `acorn` (ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಪಾರ್ಸರ್‌ಗಳು) ನಂತಹ ಸಾಧನಗಳನ್ನು ಬಳಸಬಹುದು. ಈ ವಿಧಾನಕ್ಕಾಗಿ ಉತ್ತಮ ಟೆಸ್ಟ್ ಕವರೇಜ್ ಹೊಂದಿರುವುದು ನಿರ್ಣಾಯಕ.

ನೀವು ಇದನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದು ಎಂಬುದರ ಸರಳೀಕೃತ ಉದಾಹರಣೆ ಇಲ್ಲಿದೆ:

// build-safelist.js
const fs = require('fs');
const glob = require('glob');

// Function to extract potential Tailwind classes from a string (very basic example)
function extractClasses(content) {
  const classRegex = /(?:class(?:Name)?=["'])([^"']*)(?:["'])/g;  // Improved regex
  let match;
  const classes = new Set();
  while ((match = classRegex.exec(content)) !== null) {
    const classList = match[1].split(/\s+/);
    classList.forEach(cls => {
      // Further refine this to check if the class *looks* like a Tailwind class
      if (cls.startsWith('bg-') || cls.startsWith('text-') || cls.startsWith('font-')) {  // Simplified Tailwind Class Check
        classes.add(cls);
      }
    });
  }
  return Array.from(classes);
}


const files = glob.sync('./src/**/*.{js,jsx,ts,tsx}'); // Adjust the glob pattern to match your files

let allClasses = [];
files.forEach(file => {
  const content = fs.readFileSync(file, 'utf-8');
  const extractedClasses = extractClasses(content);
   allClasses = allClasses.concat(extractedClasses);
});

const uniqueClasses = [...new Set( allClasses)];

// Read the Tailwind config
const tailwindConfigPath = './tailwind.config.js';
const tailwindConfig = require(tailwindConfigPath);

// Update the safelist
tailwindConfig.safelist = tailwindConfig.safelist || []; // Ensure safelist exists
tailwindConfig.safelist = tailwindConfig.safelist.concat(uniqueClasses);

// Write the updated config back to the file
fs.writeFileSync(tailwindConfigPath, `module.exports = ${JSON.stringify(tailwindConfig, null, 2)}`);

console.log('Tailwind config safelist updated successfully!');

ಮತ್ತು ನಿಮ್ಮ ಬಿಲ್ಡ್ ಹಂತದ ಮೊದಲು ಇದನ್ನು ಚಲಾಯಿಸಲು ನಿಮ್ಮ `package.json` ಅನ್ನು ಮಾರ್ಪಡಿಸಿ:

{"scripts": {
  "build": "node build-safelist.js && next build",  // Or your build command
  ...
}}

ಕೋಡ್ ಪಾರ್ಸಿಂಗ್‌ಗಾಗಿ ಪ್ರಮುಖ ಪರಿಗಣನೆಗಳು:

ಅನುಕೂಲಗಳು:

ಅನಾನುಕೂಲಗಳು:

4. ಕೊನೆಯ ಉಪಾಯವಾಗಿ ಇನ್‌ಲೈನ್ ಸ್ಟೈಲ್‌ಗಳನ್ನು ಬಳಸುವುದು (ಸಾಮಾನ್ಯವಾಗಿ ನಿರುತ್ಸಾಹಿಸಲಾಗುತ್ತದೆ)

ಮೇಲಿನ ಯಾವುದೇ ವಿಧಾನಗಳನ್ನು ಬಳಸಿ ಸುಲಭವಾಗಿ ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಲಾಗದ ಅತ್ಯಂತ ಡೈನಾಮಿಕ್ ಸ್ಟೈಲ್‌ಗಳನ್ನು ನೀವು ಹೊಂದಿದ್ದರೆ, ನೀವು ಕೊನೆಯ ಉಪಾಯವಾಗಿ ಇನ್‌ಲೈನ್ ಸ್ಟೈಲ್‌ಗಳನ್ನು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಬಹುದು. ಆದಾಗ್ಯೂ, ಈ ವಿಧಾನವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ನಿರುತ್ಸಾಹಿಸಲಾಗುತ್ತದೆ ಏಕೆಂದರೆ ಇದು ಟೈಲ್‌ವಿಂಡ್ CSS ನಂತಹ CSS ಫ್ರೇಮ್‌ವರ್ಕ್ ಬಳಸುವ ಉದ್ದೇಶವನ್ನು ಸೋಲಿಸುತ್ತದೆ.

ಇನ್‌ಲೈನ್ ಸ್ಟೈಲ್‌ಗಳನ್ನು CSS ಫೈಲ್‌ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸುವ ಬದಲು ನೇರವಾಗಿ HTML ಎಲಿಮೆಂಟ್‌ಗಳಿಗೆ ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ಇದು ಹಲವಾರು ಸಮಸ್ಯೆಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು:

ನೀವು ಇನ್‌ಲೈನ್ ಸ್ಟೈಲ್‌ಗಳನ್ನು ಬಳಸಬೇಕಾದರೆ, ಅವುಗಳ ಬಳಕೆಯನ್ನು ಅತ್ಯಂತ ಡೈನಾಮಿಕ್ ಮತ್ತು ಅನಿರೀಕ್ಷಿತ ಸ್ಟೈಲ್‌ಗಳಿಗೆ ಮಾತ್ರ ಸೀಮಿತಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ. ಇನ್‌ಲೈನ್ ಸ್ಟೈಲ್‌ಗಳನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುವ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ, ಉದಾಹರಣೆಗೆ ರಿಯಾಕ್ಟ್‌ನ `style` ಪ್ರೊಪ್ ಅಥವಾ Vue.js ನ `:style` ಬೈಂಡಿಂಗ್.

ಉದಾಹರಣೆ (ರಿಯಾಕ್ಟ್):

function MyComponent({ backgroundColor }) {
  return (
    
{/* ... */}
); }

ಟೈಲ್‌ವಿಂಡ್ CSS ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್‌ಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

ನಿಮ್ಮ ಟೈಲ್‌ವಿಂಡ್ CSS ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ತಂತ್ರವು ಪರಿಣಾಮಕಾರಿ ಮತ್ತು ನಿರ್ವಹಣಾ ಯೋಗ್ಯವಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಈ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನುಸರಿಸಿ:

ಅಂತರರಾಷ್ಟ್ರೀಯ ಪರಿಣಾಮಗಳೊಂದಿಗೆ ಉದಾಹರಣೆ ಸನ್ನಿವೇಶಗಳು

ಅಂತರರಾಷ್ಟ್ರೀಕರಣ (i18n) ಮತ್ತು ಸ್ಥಳೀಕರಣ (l10n) ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹೊಂದಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಪರಿಗಣಿಸುವಾಗ ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ಇನ್ನಷ್ಟು ಮುಖ್ಯವಾಗುತ್ತದೆ.

ಬಲದಿಂದ-ಎಡಕ್ಕೆ (RTL) ಭಾಷೆಗಳು

ಅರೇಬಿಕ್, ಹೀಬ್ರೂ ಮತ್ತು ಪರ್ಷಿಯನ್ ನಂತಹ ಭಾಷೆಗಳಿಗೆ, ಪಠ್ಯವು ಬಲದಿಂದ ಎಡಕ್ಕೆ ಹರಿಯುತ್ತದೆ. ಟೈಲ್‌ವಿಂಡ್ CSS RTL ಲೇಔಟ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಯುಟಿಲಿಟಿಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ `rtl:text-right` ಮತ್ತು `ltr:text-left`. ಆದಾಗ್ಯೂ, ಈ ಯುಟಿಲಿಟಿಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಿದರೆ ಅಥವಾ ನಿಮ್ಮ ಮೂಲ ಕೋಡ್‌ನಲ್ಲಿ ಪತ್ತೆಹಚ್ಚಿದರೆ ಮಾತ್ರ ಅಂತಿಮ CSS ಫೈಲ್‌ನಲ್ಲಿ ಸೇರಿಸಲಾಗುತ್ತದೆ.

ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ RTL ಭಾಷೆಗಳನ್ನು ಬೆಂಬಲಿಸಿದರೆ, ನಿಮ್ಮ ಲೇಔಟ್‌ಗಳು RTL ಪರಿಸರದಲ್ಲಿ ಸರಿಯಾಗಿ ಪ್ರದರ್ಶಿಸಲ್ಪಡುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಸಂಬಂಧಿತ RTL ಯುಟಿಲಿಟಿಗಳನ್ನು ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಲು ಮರೆಯದಿರಿ. ಉದಾಹರಣೆಗೆ, ಎಲ್ಲಾ RTL ಮತ್ತು LTR ಯುಟಿಲಿಟಿಗಳನ್ನು ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಲು ನೀವು `/^(rtl:|ltr:)/` ನಂತಹ ರೆಗ್ಯುಲರ್ ಎಕ್ಸ್‌ಪ್ರೆಶನ್ ಅನ್ನು ಬಳಸಬಹುದು.

ವಿವಿಧ ಫಾಂಟ್ ಕುಟುಂಬಗಳು

ವಿವಿಧ ಭಾಷೆಗಳಿಗೆ ಅಕ್ಷರಗಳನ್ನು ಸರಿಯಾಗಿ ಪ್ರದರ್ಶಿಸಲು ವಿವಿಧ ಫಾಂಟ್ ಕುಟುಂಬಗಳು ಬೇಕಾಗುತ್ತವೆ. ಉದಾಹರಣೆಗೆ, ಚೈನೀಸ್, ಜಪಾನೀಸ್ ಮತ್ತು ಕೊರಿಯನ್ ಭಾಷೆಗಳಿಗೆ CJK ಅಕ್ಷರಗಳನ್ನು ಬೆಂಬಲಿಸುವ ಫಾಂಟ್‌ಗಳು ಬೇಕಾಗುತ್ತವೆ. ಅದೇ ರೀತಿ, ಉಚ್ಚಾರಣಾ ಚಿಹ್ನೆಗಳನ್ನು ಹೊಂದಿರುವ ಭಾಷೆಗಳಿಗೆ ಆ ಅಕ್ಷರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಫಾಂಟ್‌ಗಳು ಬೇಕಾಗಬಹುದು.

ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನೇಕ ಭಾಷೆಗಳನ್ನು ಬೆಂಬಲಿಸಿದರೆ, ನೀವು ವಿವಿಧ ಭಾಷೆಗಳಿಗೆ ವಿವಿಧ ಫಾಂಟ್ ಕುಟುಂಬಗಳನ್ನು ಬಳಸಬೇಕಾಗಬಹುದು. ಕಸ್ಟಮ್ ಫಾಂಟ್ ಕುಟುಂಬಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ನೀವು CSS ನಲ್ಲಿ `@font-face` ನಿಯಮವನ್ನು ಬಳಸಬಹುದು ಮತ್ತು ನಂತರ ಅವುಗಳನ್ನು ನಿರ್ದಿಷ್ಟ ಎಲಿಮೆಂಟ್‌ಗಳಿಗೆ ಅನ್ವಯಿಸಲು ಟೈಲ್‌ವಿಂಡ್ CSS ಅನ್ನು ಬಳಸಬಹುದು. ಅಂತಿಮ CSS ಫೈಲ್‌ನಲ್ಲಿ ಅವುಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಿಮ್ಮ CSS ನಲ್ಲಿ ನೀವು ಬಳಸುವ ಫಾಂಟ್ ಕುಟುಂಬದ ಹೆಸರುಗಳನ್ನು ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಲು ಮರೆಯದಿರಿ.

ಉದಾಹರಣೆ:

/* In your global CSS file */
@font-face {
  font-family: 'Noto Sans SC';
  src: url('/fonts/NotoSansSC-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
}

@font-face {
  font-family: 'Noto Sans SC';
  src: url('/fonts/NotoSansSC-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
}

/* In your tailwind.config.js */
module.exports = {
  // ...
  theme: {
    extend: {
      fontFamily: {
        'sans': ['Noto Sans SC', ...],
      },
    },
  },
  safelist: [
    'font-sans', // ensures font-sans is always included
  ],
};

ಸ್ಟೈಲಿಂಗ್‌ನಲ್ಲಿ ಸಾಂಸ್ಕೃತಿಕ ವ್ಯತ್ಯಾಸಗಳು

ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ, ಸ್ಟೈಲಿಂಗ್ ಆದ್ಯತೆಗಳು ಸಂಸ್ಕೃತಿಗಳಾದ್ಯಂತ ಬದಲಾಗಬಹುದು. ಉದಾಹರಣೆಗೆ, ಬಣ್ಣದ ಸಂಬಂಧಗಳು ಒಂದು ಸಂಸ್ಕೃತಿಯಿಂದ ಇನ್ನೊಂದಕ್ಕೆ ಗಮನಾರ್ಹವಾಗಿ ಭಿನ್ನವಾಗಿರಬಹುದು. ಅದೇ ರೀತಿ, ವೈಟ್‌ಸ್ಪೇಸ್ ಮತ್ತು ಟೈಪೋಗ್ರಫಿಯ ಬಳಕೆಯು ಸಾಂಸ್ಕೃತಿಕ ರೂಢಿಗಳಿಂದ ಪ್ರಭಾವಿತವಾಗಬಹುದು.

ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರನ್ನು ಪೂರೈಸುತ್ತಿದ್ದರೆ, ಈ ಸಾಂಸ್ಕೃತಿಕ ವ್ಯತ್ಯಾಸಗಳ ಬಗ್ಗೆ ಗಮನವಿರಲಿ ಮತ್ತು ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ನಿಮ್ಮ ಸ್ಟೈಲಿಂಗ್ ಅನ್ನು ಹೊಂದಿಸಿ. ಇದು ವಿವಿಧ ಸ್ಥಳಗಳಿಗೆ ವಿವಿಧ CSS ಕ್ಲಾಸ್‌ಗಳನ್ನು ಬಳಸುವುದನ್ನು ಅಥವಾ ಬಳಕೆದಾರರಿಗೆ ಅವರ ಸ್ಟೈಲಿಂಗ್ ಆದ್ಯತೆಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಅವಕಾಶ ನೀಡುವುದನ್ನು ಒಳಗೊಂಡಿರಬಹುದು.

ತೀರ್ಮಾನ

ಟೈಲ್‌ವಿಂಡ್ CSS ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ಪ್ರೊಡಕ್ಷನ್ ಪರಿಸರಗಳಿಗೆ ಒಂದು ನಿರ್ಣಾಯಕ ಆಪ್ಟಿಮೈಸೇಶನ್ ತಂತ್ರವಾಗಿದೆ. ಅಂತಿಮ CSS ಫೈಲ್‌ನಲ್ಲಿ ಸೇರಿಸಬೇಕಾದ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ, ನೀವು ಅದರ ಗಾತ್ರವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡಬಹುದು, ಇದು ವೇಗದ ಪುಟ ಲೋಡ್ ಸಮಯ ಮತ್ತು ಸುಧಾರಿತ ಕಾರ್ಯಕ್ಷಮತೆಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಡೈನಾಮಿಕ್ ಕ್ಲಾಸ್ ನೇಮ್‌ಗಳು ಒಂದು ಸವಾಲನ್ನು ಒಡ್ಡಿದರೂ, ಅವುಗಳನ್ನು ಸೇಫ್‌ಲಿಸ್ಟ್ ಮಾಡಲು ಹಲವಾರು ತಂತ್ರಗಳಿವೆ, ಸರಳ ಸ್ಪಷ್ಟ ಪಟ್ಟಿಗಳಿಂದ ಹಿಡಿದು ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಡೈನಾಮಿಕ್ ಸೇಫ್‌ಲಿಸ್ಟ್ ರಚನೆಯವರೆಗೆ. ಈ ಮಾರ್ಗದರ್ಶಿಯಲ್ಲಿ ವಿವರಿಸಲಾದ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅನುಸರಿಸುವ ಮೂಲಕ, ನಿಮ್ಮ ಟೈಲ್‌ವಿಂಡ್ CSS ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ತಂತ್ರವು ಪರಿಣಾಮಕಾರಿ, ನಿರ್ವಹಣಾ ಯೋಗ್ಯ, ಮತ್ತು ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್‌ನ ವಿಶಿಷ್ಟ ಅಗತ್ಯಗಳಿಗೆ ಹೊಂದಿಕೊಳ್ಳಬಲ್ಲದು ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು.

ನಿಮ್ಮ ವೆಬ್ ಅಭಿವೃದ್ಧಿ ಯೋಜನೆಗಳಲ್ಲಿ ಬಳಕೆದಾರರ ಅನುಭವ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಗೆ ಆದ್ಯತೆ ನೀಡಲು ಮರೆಯದಿರಿ. ಈ ಗುರಿಗಳನ್ನು ಸಾಧಿಸಲು ಟೈಲ್‌ವಿಂಡ್ CSS ನೊಂದಿಗೆ ಸೇಫ್‌ಲಿಸ್ಟಿಂಗ್ ಒಂದು ಶಕ್ತಿಯುತ ಸಾಧನವಾಗಿದೆ.