الفرق بين المراجعتين لصفحة: «Next.js/customizing postcss config»

من موسوعة حسوب
أنشأ الصفحة ب'= إعدادات مخصصة للمصرّف PostCSS في Next.js = تقدم Next.js كما رأينا دعمًا مدمجًا للتنسيقات الموَّرثة CSS،...'
 
طلا ملخص تعديل
 
(3 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
= إعدادات مخصصة للمصرّف PostCSS في Next.js =
<noinclude>{{DISPLAYTITLE:إعدادات مخصصة للمصرّف PostCSS في Next.js}}</noinclude>
تقدم Next.js كما رأينا دعمًا مدمجًا للتنسيقات الموَّرثة CSS، وسنتابع الحديث عن تهيئة المصرِّف الخاص بهذه التنسيقات.
تقدم Next.js دعمًا مدمجًا لتنسيقات [[CSS]]، وسنتابع الحديث عن تهيئة المصرِّف الخاص بهذه التنسيقات وتخصيصه.


== السلوك الافتراضي لتصريف CSS ==
== السلوك الافتراضي لتصريف CSS ==
سطر 10: سطر 10:


* الخاصية <code>all</code>
* الخاصية <code>all</code>
* خصائص التوقف
* خاصيات التوقف Break Properties
* الخاصية <code>font-variant</code>.
* الخاصية <code>font-variant</code>
* خصائص الفراغات بين أعمدة وأسطر جدول <code>Gap</code>.
* خصائص الفراغات بين أعمدة وأسطر جدول <code>Gap</code>
* [https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#Syntax_improvements_in_Level_4 مجالات استعلام الوسائط media@].
* [https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#Syntax_improvements_in_Level_4 مجالات استعلام الوسائط media@]


لا تُصرَّف الخاصية [[CSS/grid|CSS Grid]] (شبكة CSS) ولا [[CSS/--*|الخاصيات المُخصصة]] Custom Properties التي تستخدم مع الدالة <code>()var</code>  افتراضيًا لتتوافق مع IE11. ولتصرِّف تخطيط شبكة CSS كي تدعم IE11 يمكنك وضع التعليق التالي في أعلى ملف CSS:<syntaxhighlight lang="css">
لا تُصرَّف الخاصية [[CSS/grid|CSS Grid]] (شبكة CSS) ولا [[CSS/--*|الخاصيات المُخصصة]] Custom Properties افتراضيًا لتتوافق مع IE11. ولتصرِّف تخطيط شبكة CSS كي تدعم IE11 يمكنك وضع التعليق التالي في أعلى ملف CSS:<syntaxhighlight lang="css">
/* autoprefixer grid: autoplace */
/* autoprefixer grid: autoplace */
</syntaxhighlight>كما يمكنك دعم IE11 ليعرض تخطيط شبكة CSS في كامل صفحات المشروع بتهيئة autoprefixer بالإعدادات التي نعرضها تاليًا في فقرة "تخصيص الإضافات"
</syntaxhighlight>كما يمكنك دعم IE11 ليعرض تخطيط شبكة CSS في كامل صفحات المشروع بتهيئة autoprefixer بالإعدادات التالية وانظر فقرة "تخصيص الإضافات" لمزيد من التفاصيل. <syntaxhighlight lang="javascript">
{
  "plugins": [
    "postcss-flexbugs-fixes",
    [
      "postcss-preset-env",
      {
        "autoprefixer": {
          "flexbox": "no-2009",
          "grid": "autoplace"
        },
        "stage": 3,
        "features": {
          "custom-properties": false
        }
      }
    ]
  ]
}
</syntaxhighlight>ولا تُصرّف أيضًا متغيرات CSS [https://github.com/MadLittleMods/postcss-css-variables#caveats لعدم وجود إمكانية لتصريفها بشكل آمن]. إن كنت مضطرًا لاستخدام المتغيرات، فكر باستخدام بدائل مثل متغيرات Sass والتي تُصرَّف من قبل [[Sass]].


لا تُصرّف أيضًا متغيرات CSS لعدم وجود إمكانية لتصريفها بشكل آمن. إن كنت مضطرًا لاستخدام المتغيرات،  فكر باستخدام بدائل مثل متغيرات Sass والتي تُصرَّف من قبل [[Sass]]
== تحديد المتصفح المستهدف ==
 
تتيح لك Next.js تحديد المتصفح المستهدف (تهيئة autoprefixer وميزات CSS المُصرّفة) من خلال حقل قائمة المتصفحات [https://github.com/browserslist/browserslist Browserslist]. ولتخصيص قائمة متصفحات، أنشئ المفتاح <code>browserslist</code> في ملف <code>package.json</code> كالتالي:<syntaxhighlight lang="json">
== تخصيص المتصفح المستهدف ==
تتيح لك Next.js تهيئة المتصفح المستهدف (تهيئة autoprefixer وميزات CSS المُصرّفة) من خلال حقل قائمة المتصفحات [https://github.com/browserslist/browserslist Browserslist]. ولتخصيص قائمة متصفحات، أنشئ المفتاح <code>browserslist</code> في ملف <code>package.json</code> كالتالي:<syntaxhighlight lang="json">
{
{
   "browserslist": [">0.3%", "not ie 11", "not dead", "not op_mini all"]
   "browserslist": [">0.3%", "not ie 11", "not dead", "not op_mini all"]
}
}
</syntaxhighlight>كما تستيطع استخدام browserl.ist الأداة لتعرض المتصفحات التي تستهدفها بصورة مرئية.
</syntaxhighlight>كما تستيطع استخدام الأداة [https://browserl.ist/?q=%3E0.3%25%2C+not+ie+11%2C+not+dead%2C+not+op_mini+all browserl.ist] لتعرض المتصفحات التي تستهدفها بصورة مرئية.


== تهيئة وحدات CSS ==
== تهيئة وحدات CSS ==
لا حاجة لأية إعدادات من أجل تهيئة وحدات CSS، وتذكر أن كل ما عليك فعله لاستخدام هذه الوحدات هو تغيير اسم الملف ليكون امتداده <code>module.css.</code>. بإمكانك الاطلاع على معلومات أكثر عن وحدات CSS في [[Next.js/built in css support|توثيق Next.js على موسوعة حسوب]].
لا حاجة لأية إعدادات من أجل تهيئة وحدات CSS، وتذكر أن كل ما عليك فعله لاستخدام هذه الوحدات هو تغيير اسم الملف ليكون امتداده <code>module.css.</code>. بإمكانك الاطلاع على معلومات أكثر عن وحدات CSS في [[Next.js/built in css support|توثيق Next.js]].


== تخصيص الإضافات ==
== تخصيص الإضافات ==
<blockquote>'''تنبيه''': عندما تعرف ملف تهيئة لمصرّف PostCSS فسيعطّل تمامًا  السلوك الافتراضي لتصريف CSS. تأكد من التهيئة اليدوية لكل الميزات التي تحتاجها في التصريف بما في ذلك . كما ستحتاج إلى تثبيت أية إضافات تشير إليها في ملف الإعدادات المخصص مثل <code>npm install postcss-flexbugs-fixes postcss-preset-env</code>.</blockquote>لتخصيص إعدادات المصرِّف PostCSS، أنشئ الملف <code>postcss.config.json</code> في جذر مشروعك. لاحظ أن الشيفرة التالية هي الإعدادات الافتراضية التي تستخدمها Next.js:<syntaxhighlight lang="json">
'''تنبيه''': عندما تُعرِّف ملف تهيئة لمصرّف PostCSS، سيعطّل ذلك السلوك الافتراضي لتصريف CSS تمامًا. تأكد من التهيئة اليدوية لكل الميزات التي تحتاجها في التصريف بما في ذلك Autoprefixer. كما ستحتاج إلى تثبيت أية إضافات تشير إليها في ملف الإعدادات المخصص مثل:<syntaxhighlight lang="json">
npm install postcss-flexbugs-fixes postcss-preset-env
</syntaxhighlight>لتخصيص إعدادات المصرِّف PostCSS، أنشئ الملف <code>postcss.config.json</code> في جذر مشروعك. لاحظ أن الشيفرة التالية هي الإعدادات الافتراضية التي تستخدمها Next.js:<syntaxhighlight lang="json">
{
{
   "plugins": [
   "plugins": [
سطر 50: سطر 69:
   ]
   ]
}
}
</syntaxhighlight>'''ملاحظة''': تتيح لك Next.js تسمية ملف بالامتداد <code>.postcssrc.json</code> أو أن تُقرأ الإعدادات من المفتاح <code>postcss</code> في الملف <code>package.json</code>.
</syntaxhighlight>'''ملاحظة''': تتيح لك Next.js تسمية ملف بالامتداد <code>postcssrc.json.</code> أو أن تُقرأ الإعدادات من المفتاح <code>postcss</code> في الملف <code>package.json</code>.


يمكنك أيضًا تهيئة من خلال الملف <code>postcss.config.js</code> الذي يساعدك في تضمين الإضافات شرطيًا وفقًا للبيئة التي تعمل ضمنها:<syntaxhighlight lang="javascript">
يمكنك أيضًا تهيئة PostCSS من خلال الملف <code>postcss.config.js</code> الذي يساعدك في تضمين الإضافات شرطيًا وفقًا للبيئة التي تعمل ضمنها:<syntaxhighlight lang="javascript">
module.exports = {
module.exports = {
   plugins:
   plugins:
سطر 75: سطر 94:
         ],
         ],
}
}
</syntaxhighlight>لا تستخدم <code>()require</code> لإدراج إضافات، فلا بد من إضافتها كسلسلة نصية.
</syntaxhighlight>'''ملاحظة''': تسمح Next.js بتسمية الملف باسم <code>postcssrc.js.</code> أيضًا.


'''ملاحظة''': إن كنت تستخدم الملف في دعم أدوات ليست للغة في المشروع نفسه، فعليك استخدام الصيغة الكائنية القابلة للتشارك interoperable object-based format.<syntaxhighlight lang="javascript">
لا تستخدم <code>()require</code> لإدراج إضافات، فلا بد من إضافتها كسلسلة نصية.
 
'''ملاحظة''': إن كنت تستخدم الملف <code>postcss.config.js</code> في دعم أدوات ليست للغة Next.js في المشروع نفسه، فعليك استخدام الصيغة الكائنية القابلة للتشارك interoperable object-based format.<syntaxhighlight lang="javascript">
module.exports = {
module.exports = {
plugins: {
  plugins: {
'postcss-flexbugs-fixes': {},
    'postcss-flexbugs-fixes': {},
'postcss-preset-env': {
    'postcss-preset-env': {
  autoprefixer: {
      autoprefixer: {
    flexbox: 'no-2009',
        flexbox: 'no-2009',
  },
      },
  stage: 3,
      stage: 3,
  features: {
      features: {
    'custom-properties': false,
        'custom-properties': false,
  },
      },
},
    },
},
  },
}
}
</syntaxhighlight>
</syntaxhighlight>
== أمثلة ==
* [https://github.com/vercel/next.js/tree/canary/examples/with-tailwindcss Tailwind CSS Example]


== المصادر ==
== المصادر ==


* الصفحة [https://nextjs.org/docs/advanced-features/customizing-postcss-config Cutomizing PostCSS Config] من توثيق Next.js الرسمي.
* الصفحة [https://nextjs.org/docs/advanced-features/customizing-postcss-config Cutomizing PostCSS Config] من توثيق Next.js الرسمي.
[[تصنيف:Next.js|{{SUBPAGENAME}}]]
[[تصنيف:Next.js Advanced Features|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 17:09، 3 يناير 2023

تقدم Next.js دعمًا مدمجًا لتنسيقات CSS، وسنتابع الحديث عن تهيئة المصرِّف الخاص بهذه التنسيقات وتخصيصه.

السلوك الافتراضي لتصريف CSS

تصرّف Next.js تنسيقات CSS التي تقدم دعمًا مدمجًا لها باستخدام PostCSS، وذلك عبر مجموعة التحويلات التالية (في حال لم نهيئ المصرَّف إطلاقًا):

  1. Autoprefixer: يضيف تلقائيًا اللاحقات الخاصة بالموّزعين إلى قواعد CSS (وصولًا إلى IE11).
  2. Cross-browser Flexbox bugs: وقد صُححت لتسلك سلوك the spec.
  3. تُصرّف ميزات CSS الجديدة تلقائيًا لتتوافق مع المتصفح IE 11.

لا تُصرَّف الخاصية CSS Grid (شبكة CSS) ولا الخاصيات المُخصصة Custom Properties افتراضيًا لتتوافق مع IE11. ولتصرِّف تخطيط شبكة CSS كي تدعم IE11 يمكنك وضع التعليق التالي في أعلى ملف CSS:

/* autoprefixer grid: autoplace */

كما يمكنك دعم IE11 ليعرض تخطيط شبكة CSS في كامل صفحات المشروع بتهيئة autoprefixer بالإعدادات التالية وانظر فقرة "تخصيص الإضافات" لمزيد من التفاصيل.

{
  "plugins": [
    "postcss-flexbugs-fixes",
    [
      "postcss-preset-env",
      {
        "autoprefixer": {
          "flexbox": "no-2009",
          "grid": "autoplace"
        },
        "stage": 3,
        "features": {
          "custom-properties": false
        }
      }
    ]
  ]
}

ولا تُصرّف أيضًا متغيرات CSS لعدم وجود إمكانية لتصريفها بشكل آمن. إن كنت مضطرًا لاستخدام المتغيرات، فكر باستخدام بدائل مثل متغيرات Sass والتي تُصرَّف من قبل Sass.

تحديد المتصفح المستهدف

تتيح لك Next.js تحديد المتصفح المستهدف (تهيئة autoprefixer وميزات CSS المُصرّفة) من خلال حقل قائمة المتصفحات Browserslist. ولتخصيص قائمة متصفحات، أنشئ المفتاح browserslist في ملف package.json كالتالي:

{
  "browserslist": [">0.3%", "not ie 11", "not dead", "not op_mini all"]
}

كما تستيطع استخدام الأداة browserl.ist لتعرض المتصفحات التي تستهدفها بصورة مرئية.

تهيئة وحدات CSS

لا حاجة لأية إعدادات من أجل تهيئة وحدات CSS، وتذكر أن كل ما عليك فعله لاستخدام هذه الوحدات هو تغيير اسم الملف ليكون امتداده module.css.. بإمكانك الاطلاع على معلومات أكثر عن وحدات CSS في توثيق Next.js.

تخصيص الإضافات

تنبيه: عندما تُعرِّف ملف تهيئة لمصرّف PostCSS، سيعطّل ذلك السلوك الافتراضي لتصريف CSS تمامًا. تأكد من التهيئة اليدوية لكل الميزات التي تحتاجها في التصريف بما في ذلك Autoprefixer. كما ستحتاج إلى تثبيت أية إضافات تشير إليها في ملف الإعدادات المخصص مثل:

npm install postcss-flexbugs-fixes postcss-preset-env

لتخصيص إعدادات المصرِّف PostCSS، أنشئ الملف postcss.config.json في جذر مشروعك. لاحظ أن الشيفرة التالية هي الإعدادات الافتراضية التي تستخدمها Next.js:

{
  "plugins": [
    "postcss-flexbugs-fixes",
    [
      "postcss-preset-env",
      {
        "autoprefixer": {
          "flexbox": "no-2009"
        },
        "stage": 3,
        "features": {
          "custom-properties": false
        }
      }
    ]
  ]
}

ملاحظة: تتيح لك Next.js تسمية ملف بالامتداد postcssrc.json. أو أن تُقرأ الإعدادات من المفتاح postcss في الملف package.json. يمكنك أيضًا تهيئة PostCSS من خلال الملف postcss.config.js الذي يساعدك في تضمين الإضافات شرطيًا وفقًا للبيئة التي تعمل ضمنها:

module.exports = {
  plugins:
    process.env.NODE_ENV === 'production'
      ? [
          'postcss-flexbugs-fixes',
          [
            'postcss-preset-env',
            {
              autoprefixer: {
                flexbox: 'no-2009',
              },
              stage: 3,
              features: {
                'custom-properties': false,
              },
            },
          ],
        ]
      : [
          // لا تحويلات في مرحلة التطوير
        ],
}

ملاحظة: تسمح Next.js بتسمية الملف باسم postcssrc.js. أيضًا.

لا تستخدم ()require لإدراج إضافات، فلا بد من إضافتها كسلسلة نصية.

ملاحظة: إن كنت تستخدم الملف postcss.config.js في دعم أدوات ليست للغة Next.js في المشروع نفسه، فعليك استخدام الصيغة الكائنية القابلة للتشارك interoperable object-based format.

module.exports = {
  plugins: {
    'postcss-flexbugs-fixes': {},
    'postcss-preset-env': {
      autoprefixer: {
        flexbox: 'no-2009',
      },
      stage: 3,
      features: {
        'custom-properties': false,
      },
    },
  },
}

أمثلة

المصادر