بوٹسٹریپ اور ویب پیک
Webpack کا استعمال کرتے ہوئے اپنے پروجیکٹ میں Bootstrap کے CSS اور JavaScript کو شامل اور بنڈل کرنے کے بارے میں سرکاری رہنما۔
سیٹ اپ
ہم شروع سے Bootstrap کے ساتھ ایک Webpack پروجیکٹ بنا رہے ہیں، لہذا اس سے پہلے کہ ہم واقعی شروع کر سکیں کچھ شرائط اور آگے کے اقدامات ہیں۔ اس گائیڈ کے لیے آپ کو Node.js انسٹال کرنے اور ٹرمینل سے کچھ واقفیت کی ضرورت ہے۔
-
ایک پروجیکٹ فولڈر بنائیں اور این پی ایم سیٹ اپ کریں۔ ہم
my-project
فولڈر بنائیں گے اور npm کو-y
دلیل کے ساتھ شروع کریں گے تاکہ ہم سے تمام انٹرایکٹو سوالات پوچھنے سے بچ سکیں۔mkdir my-project && cd my-project npm init -y
-
ویب پیک انسٹال کریں۔ اس کے بعد ہمیں اپنی Webpack ڈویلپمنٹ انحصار کو انسٹال کرنے کی ضرورت ہے:
webpack
Webpack کے بنیادی حصے کے لیے،webpack-cli
تاکہ ہم ٹرمینل سے Webpack کمانڈز چلا سکیں، اورwebpack-dev-server
اس طرح ہم مقامی ترقیاتی سرور چلا سکیں۔ ہم--save-dev
یہ اشارہ کرنے کے لیے استعمال کرتے ہیں کہ یہ انحصار صرف ترقیاتی استعمال کے لیے ہیں نہ کہ پیداوار کے لیے۔npm i --save-dev webpack webpack-cli webpack-dev-server
-
بوٹسٹریپ انسٹال کریں۔ اب ہم بوٹسٹریپ انسٹال کر سکتے ہیں۔ ہم Popper کو بھی انسٹال کریں گے کیونکہ ہمارے ڈراپ ڈاؤن، پاپ اوور، اور ٹول ٹپس ان کی پوزیشننگ کے لیے اس پر منحصر ہیں۔ اگر آپ ان اجزاء کو استعمال کرنے کا ارادہ نہیں رکھتے ہیں، تو آپ یہاں Popper کو چھوڑ سکتے ہیں۔
npm i --save bootstrap @popperjs/core
-
اضافی انحصار انسٹال کریں۔ Webpack اور Bootstrap کے علاوہ، ہمیں Bootstrap کے CSS اور JS کو Webpack کے ساتھ صحیح طریقے سے درآمد اور بنڈل کرنے کے لیے کچھ اور انحصار کی ضرورت ہے۔ ان میں Sass، کچھ لوڈرز، اور Autoprefixer شامل ہیں۔
npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
اب جب کہ ہمارے پاس تمام ضروری انحصار انسٹال ہیں، ہم پروجیکٹ فائلوں کو بنانے اور بوٹسٹریپ کو درآمد کرنے کا کام کر سکتے ہیں۔
پروجیکٹ کا ڈھانچہ
ہم پہلے ہی my-project
فولڈر بنا چکے ہیں اور این پی ایم کو شروع کر چکے ہیں۔ اب ہم پروجیکٹ کے ڈھانچے کو راؤنڈ آؤٹ کرنے کے لیے اپنے src
اور فولڈرز بھی بنائیں گے۔ dist
سے درج ذیل کو چلائیں my-project
، یا نیچے دکھایا گیا فولڈر اور فائل کا ڈھانچہ دستی طور پر بنائیں۔
mkdir {dist,src,src/js,src/scss}
touch dist/index.html src/js/main.js src/scss/styles.scss webpack.config.js
جب آپ کام کر لیں تو آپ کا مکمل پروجیکٹ اس طرح نظر آنا چاہیے:
my-project/
├── dist/
│ └── index.html
├── src/
│ ├── js/
│ │ └── main.js
│ └── scss/
│ └── styles.scss
├── package-lock.json
├── package.json
└── webpack.config.js
اس وقت، سب کچھ صحیح جگہ پر ہے، لیکن Webpack کام نہیں کرے گا کیونکہ ہم نے ابھی تک اپنا اندراج نہیں بھرا ہے webpack.config.js
۔
ویب پیک کو ترتیب دیں۔
انحصار انسٹال ہونے اور ہمارے پروجیکٹ فولڈر کو کوڈنگ شروع کرنے کے لیے تیار ہونے کے ساتھ، اب ہم Webpack کو ترتیب دے سکتے ہیں اور اپنے پروجیکٹ کو مقامی طور پر چلا سکتے ہیں۔
-
webpack.config.js
اپنے ایڈیٹر میں کھولیں ۔ چونکہ یہ خالی ہے، ہمیں اس میں کچھ بوائلر پلیٹ کنفیگریشن شامل کرنے کی ضرورت ہوگی تاکہ ہم اپنا سرور شروع کر سکیں۔ تشکیل کا یہ حصہ Webpack کو بتاتا ہے کہ ہمارے پروجیکٹ کے جاوا اسکرپٹ کو تلاش کرنا ہے، جہاں مرتب شدہ کوڈ کو (dist
) میں آؤٹ پٹ کرنا ہے، اور ڈویلپمنٹ سرور کو کیسا برتاؤ کرنا چاہیے (dist
ہاٹ ری لوڈ کے ساتھ فولڈر سے کھینچنا)۔const path = require('path') module.exports = { entry: './src/js/main.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist') }, devServer: { static: path.resolve(__dirname, 'dist'), port: 8080, hot: true } }
-
اگلا ہم اپنے میں بھرتے ہیں
dist/index.html
۔ یہ HTML صفحہ ہے Webpack بنڈل CSS اور JS کو استعمال کرنے کے لیے براؤزر میں لوڈ ہو گا جسے ہم بعد کے مراحل میں شامل کریں گے۔ اس سے پہلے کہ ہم ایسا کر سکیں، ہمیں اسے رینڈر کرنے اورoutput
پچھلے مرحلے سے JS کو شامل کرنے کے لیے کچھ دینا ہوگا۔<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap w/ Webpack</title> </head> <body> <div class="container py-4 px-3 mx-auto"> <h1>Hello, Bootstrap and Webpack!</h1> <button class="btn btn-primary">Primary button</button> </div> <script src="./main.js"></script> </body> </html>
ہم یہاں کے ساتھ بوٹسٹریپ اسٹائل کا تھوڑا سا حصہ شامل کر رہے ہیں
div class="container"
تاکہ<button>
ہم دیکھیں کہ بوٹسٹریپ کا سی ایس ایس کب ویب پیک کے ذریعے لوڈ ہوتا ہے۔ -
اب ہمیں Webpack چلانے کے لیے ایک npm اسکرپٹ کی ضرورت ہے۔ نیچے دکھائی گئی اسکرپٹ کو کھولیں
package.json
اور شامل کریںstart
(آپ کے پاس پہلے سے ہی ٹیسٹ اسکرپٹ ہونا چاہیے)۔ ہم اس اسکرپٹ کو اپنے مقامی Webpack دیو سرور کو شروع کرنے کے لیے استعمال کریں گے۔{ // ... "scripts": { "start": "webpack serve --mode development", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
اور آخر میں، ہم Webpack شروع کر سکتے ہیں۔ اپنے ٹرمینل کے فولڈر سے
my-project
، اس نئے شامل کردہ npm اسکرپٹ کو چلائیں:npm start
اس گائیڈ کے اگلے اور آخری حصے میں، ہم Webpack لوڈرز مرتب کریں گے اور بوٹسٹریپ کے تمام CSS اور JavaScript کو درآمد کریں گے۔
بوٹسٹریپ درآمد کریں۔
بوٹسٹریپ کو Webpack میں درآمد کرنے کے لیے پہلے سیکشن میں انسٹال کردہ لوڈرز کی ضرورت ہوتی ہے۔ ہم نے انہیں npm کے ساتھ انسٹال کیا ہے، لیکن اب Webpack کو ان کے استعمال کے لیے کنفیگر کرنے کی ضرورت ہے۔
-
میں لوڈرز سیٹ اپ کریں
webpack.config.js
۔ آپ کی کنفیگریشن فائل اب مکمل ہو چکی ہے اور نیچے دیے گئے ٹکڑوں سے مماثل ہونی چاہیے۔ یہاں صرف نیا حصہmodule
سیکشن ہے۔const path = require('path') module.exports = { entry: './src/js/main.js', output: { filename: 'main.js', path: path.resolve(__dirname, 'dist') }, devServer: { static: path.resolve(__dirname, 'dist'), port: 8080, hot: true }, module: { rules: [ { test: /\.(scss)$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'postcss-loader', options: { postcssOptions: { plugins: () => [ require('autoprefixer') ] } } }, { loader: 'sass-loader' } ] } ] } }
ہمیں ان تمام لوڈرز کی ضرورت کیوں ہے اس کا ایک خلاصہ یہ ہے۔ سی ایس ایس کو HTML صفحہ کے
style-loader
ایک<style>
عنصر میں داخل کرتا ہے، استعمال کرنے میں مدد کرتا ہے اور , Autoprefixer کے لیے ضروری ہے، اور ہمیں Sass استعمال کرنے کی اجازت دیتا ہے۔<head>
css-loader
@import
url()
postcss-loader
sass-loader
-
اب، بوٹسٹریپ کا سی ایس ایس درآمد کرتے ہیں۔
src/scss/styles.scss
بوٹسٹریپ کے تمام سورس ساس کو درآمد کرنے کے لیے درج ذیل کو شامل کریں ۔// Import all of Bootstrap's CSS @import "~bootstrap/scss/bootstrap";
اگر آپ چاہیں تو آپ انفرادی طور پر ہماری اسٹائل شیٹس بھی درآمد کر سکتے ہیں۔ تفصیلات کے لیے ہماری Sass درآمدی دستاویزات پڑھیں ۔
-
اس کے بعد ہم CSS لوڈ کرتے ہیں اور بوٹسٹریپ کا جاوا اسکرپٹ درآمد کرتے ہیں۔
src/js/main.js
سی ایس ایس کو لوڈ کرنے اور بوٹسٹریپ کے تمام جے ایس کو درآمد کرنے کے لیے درج ذیل کو شامل کریں ۔ پوپر بوٹسٹریپ کے ذریعے خود بخود درآمد ہو جائے گا۔// Import our custom CSS import '../scss/styles.scss' // Import all of Bootstrap's JS import * as bootstrap from 'bootstrap'
بنڈل کے سائز کو کم رکھنے کے لیے آپ انفرادی طور پر جاوا اسکرپٹ پلگ ان بھی درآمد کر سکتے ہیں:
import Alert from 'bootstrap/js/dist/alert' // or, specify which plugins you need: import { Tooltip, Toast, Popover } from 'bootstrap'
بوٹسٹریپ کے پلگ انز کو استعمال کرنے کے طریقے کے بارے میں مزید معلومات کے لیے ہماری جاوا اسکرپٹ دستاویزات پڑھیں ۔
-
اور آپ کا کام ہو گیا! 🎉 بوٹسٹریپ کے سورس Sass اور JS کے مکمل طور پر لوڈ ہونے کے ساتھ، آپ کا لوکل ڈویلپمنٹ سرور اب ایسا نظر آنا چاہیے۔
اب آپ بوٹسٹریپ کے کسی بھی اجزاء کو شامل کرنا شروع کر سکتے ہیں جسے آپ استعمال کرنا چاہتے ہیں۔ اضافی کسٹم ساس کو شامل کرنے اور بوٹسٹریپ کے سی ایس ایس اور جے ایس کے صرف ان حصوں کو درآمد کرکے اپنی تعمیر کو بہتر بنانے کے لیے مکمل Webpack مثال کے پروجیکٹ کو ضرور دیکھیں جن کی آپ کو ضرورت ہے۔
پیداوار کی اصلاح
آپ کے سیٹ اپ پر منحصر ہے، آپ پروڈکشن میں پروجیکٹ کو چلانے کے لیے مفید کچھ اضافی سیکیورٹی اور رفتار کی اصلاح کو لاگو کرنا چاہیں گے۔ نوٹ کریں کہ یہ اصلاحیں Webpack مثال کے منصوبے پر لاگو نہیں ہوتی ہیں اور ان پر عمل درآمد آپ پر منحصر ہے۔
CSS نکالنا
ہم نے style-loader
اوپر جو ترتیب دیا ہے وہ آسانی سے بنڈل میں CSS کا اخراج کرتا ہے تاکہ CSS فائل کو دستی طور پر لوڈ dist/index.html
کرنا ضروری نہ ہو۔ یہ طریقہ ایک سخت مواد کی حفاظتی پالیسی کے ساتھ کام نہیں کر سکتا، تاہم، اور بنڈل کے بڑے سائز کی وجہ سے یہ آپ کی درخواست میں رکاوٹ بن سکتا ہے۔
CSS کو الگ کرنے کے لیے تاکہ ہم اسے براہ راست سے لوڈ کر سکیں ، Webpack پلگ ان dist/index.html
کا استعمال کریں ۔mini-css-extract-loader
سب سے پہلے، پلگ ان انسٹال کریں:
npm install --save-dev mini-css-extract-plugin
پھر ویب پیک کنفیگریشن میں پلگ ان کو فوری اور استعمال کریں:
--- a/webpack/webpack.config.js
+++ b/webpack/webpack.config.js
@@ -1,8 +1,10 @@
+const miniCssExtractPlugin = require('mini-css-extract-plugin')
const path = require('path')
module.exports = {
mode: 'development',
entry: './src/js/main.js',
+ plugins: [new miniCssExtractPlugin()],
output: {
filename: "main.js",
path: path.resolve(__dirname, "dist"),
@@ -18,8 +20,8 @@ module.exports = {
test: /\.(scss)$/,
use: [
{
- // Adds CSS to the DOM by injecting a `<style>` tag
- loader: 'style-loader'
+ // Extracts CSS for each JS file that includes CSS
+ loader: miniCssExtractPlugin.loader
},
{
دوبارہ چلانے کے بعد npm run build
، ایک نئی فائل ہوگی dist/main.css
، جس میں تمام CSS کی طرف سے درآمد کیا جائے گا src/js/main.js
۔ اگر آپ dist/index.html
ابھی اپنے براؤزر میں دیکھتے ہیں، تو انداز غائب ہو جائے گا، جیسا کہ اب میں ہے dist/main.css
۔ آپ تیار کردہ سی ایس ایس کو dist/index.html
اس طرح شامل کر سکتے ہیں:
--- a/webpack/dist/index.html
+++ b/webpack/dist/index.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="./main.css">
<title>Bootstrap w/ Webpack</title>
</head>
<body>
SVG فائلیں نکالنا
data:
بوٹسٹریپ کے سی ایس ایس میں ان لائن URIs کے ذریعے SVG فائلوں کے متعدد حوالہ جات شامل ہیں ۔ اگر آپ اپنے پروجیکٹ کے لیے مواد کی حفاظت کی پالیسی کی وضاحت کرتے ہیں جو data:
تصاویر کے لیے URIs کو روکتی ہے، تو یہ SVG فائلیں لوڈ نہیں ہوں گی۔ آپ Webpack کے اثاثہ ماڈیولز کی خصوصیت کا استعمال کرتے ہوئے ان لائن SVG فائلوں کو نکال کر اس مسئلے کو حل کر سکتے ہیں۔
ان لائن SVG فائلوں کو اس طرح نکالنے کے لیے Webpack کو ترتیب دیں:
--- a/webpack/webpack.config.js
+++ b/webpack/webpack.config.js
@@ -16,6 +16,14 @@ module.exports = {
},
module: {
rules: [
+ {
+ mimetype: 'image/svg+xml',
+ scheme: 'data',
+ type: 'asset/resource',
+ generator: {
+ filename: 'icons/[hash].svg'
+ }
+ },
{
test: /\.(scss)$/,
use: [
دوبارہ چلانے کے بعد npm run build
، آپ کو SVG فائلیں ملیں گی جنہیں dist/icons
CSS میں نکالا گیا ہے اور اس کا صحیح حوالہ دیا گیا ہے۔
یہاں کچھ غلط یا پرانا دیکھتے ہیں؟ براہ کرم GitHub پر ایک مسئلہ کھولیں ۔ ٹربل شوٹنگ میں مدد کی ضرورت ہے؟ GitHub پر تلاش کریں یا بحث شروع کریں ۔