برنامه نویسی

6 مفهوم Webpack برای توسعه دهندگان پیشرفته React

برای خواندن مقالات بیشتر از این قبیل به وبلاگ من مراجعه کنید

بیشتر اوقات، ما استفاده می کنیم create-react-app برای داربست یک برنامه جدید React و آن را یک روز صدا کنید.

اما در زیر سرپوش، بسیاری از کتابخانه ها در حال کار هستند تا مطمئن شوند همه چیز درست کار می کند. و بسته وب مهمترین آنها است.

امروز، ما به بررسی عمیق وب‌پک می‌پردازیم و سعی می‌کنیم قسمت‌های مختلف وب‌پک را که مربوط به آن هستند، درک کنیم توسعه واکنش نشان می دهد.

مشکل چیست؟

ما می دانیم که مرورگرهای ما چیزی جز HTML، JavaScript و CSS نمی فهمند. بنابراین سؤالات واضح هستند.

  • مرورگرهای ما چگونه فایل های دیگر را درک می کنند .jsx

  • چگونه همه فایل های مختلف در مرورگر بارگذاری می شوند؟

  • برنامه ما چگونه همراه است؟

  • چگونه می توانیم آنها را بهینه کنیم؟

بسته وب برای نجات

Webpack اینجاست تا روز را برای ما نجات دهد! این محبوب ترین باندلر موجود در بازار است و دلایل واضحی دارد!

چی بسته وب انجام می دهد همه چیز را به تبدیل می کند قابل خواندن توسط مرورگر فایل هایی که در تصویر زیر به خوبی نشان داده شده اند:

منبع: [webpack](https://webpack.js.org/)

چرا باید اهمیت دهید؟

بیشتر اوقات شما این کار را نمی کنید. اما دانش وب پک می تواند در برخی موارد پیشرفته به شما کمک کند:

به طور کلی، داشتن یک نمای کلی از فرآیند بسته‌بندی باعث می‌شود شما در مورد کاردستی خود اطمینان بیشتری داشته باشید و اشکالات سیستم تولید را درک کنید.

Webpack چگونه کار می کند

به طور معمول، وب پک از طریق فایلی به نام پیکربندی می شود webpack.config.js. اینجاست که ما می توانیم همه چیز را پیکربندی کنیم!

بیایید با یک فایل پیکربندی ساده شروع کنیم و سعی کنیم قطعات مختلف آن را درک کنیم.

مثال

فایل پیکربندی بسیار ساده برای وب پک در زیر آمده است:

const path = require('path')

module.exports = {

  entry: path.resolve(__dirname, 'src', 'index.js'),

  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  }

}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجازه دهید در موردش صحبت کنیم entry و output.

1. ورود

entry نقطه ورود درخواست شما است. اینجا جایی است که وب پک سفر خود را آغاز می کند. ما می دانیم که برنامه های React ما مانند یک درخت هستند. همه اجزاء از App.js.

عکس از نویسنده.

اما ما کجاست App.js زنده؟ در داخل زندگی می کند index.js فایل، و به همین دلیل webpack از طریق وارد برنامه می شود index.js و یک نمودار وابستگی ایجاد می کند تا مشخص کند کدام فایل ها باید ابتدا بارگذاری شوند.

2. خروجی

این یکی دیگر از مفاهیم آسان برای درک است. پس از انجام تمام کارها، webpack یک فایل باندل ایجاد می کند. که در output، می توانیم مشخص کنیم نام و محل از فایل خروجی

همچنین کاربردهای دیگری نیز دارد. اگر می‌خواهید نام‌های باندل پویا برای سیستم تولید برای مدیریت نسخه تولید کنید، می‌توانید این کار را در اینجا انجام دهید!

بیایید این را یک قدم جلوتر برداریم و سعی کنیم درک کنیم که چگونه ما jsx یا css فایل ها رسیدگی می شود.

3. لودر

لودرها یک مفهوم بسیار مهم در وب پک هستند. آنها مانند کامپایلر هستند. Webpack نوع خاصی از فایل را بررسی می کند و از لودرهای مناسب برای مدیریت آنها استفاده می کند.

یک پیکربندی معمولی از loader می تواند مانند موارد زیر باشد:

module.exports = {
    entry: { ... as before}
    output: { ... as before },

    module: {
        rules: [
            {
                test: /\.[jt]sx?$/, // matches .js, .ts, .jsx and .tsx files
                use: ['babel-loader'],, // uses babel-loader for the specified file types
                include: path.resolve(__dirname, 'src'),
                exclude: /node_modules/,
            }
        ],
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا، نگاه کنید module بخش مجموعه ای از قوانین را می طلبد. هر قانون چندین بخش دارد:

  • test -> نوع فایل خاصی را بررسی می کند. از بیان منظم استفاده می کند.

  • use -> فهرستی از لودرهای مورد استفاده برای این نوع فایل خاص را مشخص می کند.

  • include -> کدام فایل ها باید پردازش شوند.

  • exclude -> که نباید پردازش شود.

گاهی اوقات برای یک فایل خاص به بیش از یک نوع لودر نیاز داریم. یک مثال خوب بارگذاری فایل های CSS است. قانون برای آن این است:

{
    test: /\.css$/, // matches .css files only
    use: ['style-loader', 'css-loader'],
},
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا، هر دو css-loader و style-loader برای پردازش فایل استفاده می شود. نکته مهمی که در اینجا باید به آن توجه کرد این است که این لودرها به ترتیب معکوس بارگیری می شوند.

یعنی ابتدا css-loader کار خواهد کرد و سپس style-loader روی خروجی تولید شده توسط css-loader.

به طور مشابه، برای ما .scss فایل ها:

{
  test: /\.scss$/,
  use: ['style-loader', 'css-loader', 'sass-loader']
},
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. پلاگین ها

پلاگین ها یکی دیگر از جنبه های بسیار مهم وب پک هستند. پلاگین ها دلیل اصلی قدرتمندی وب پک هستند.

پلاگین ها مانند کتابخانه ها هستند. آن‌ها می‌توانند در هر مرحله از فرآیند جمع‌آوری ضربه بزنند و هر کاری که می‌خواهند انجام دهند.

const {CleanWebpackPlugin} = require('clean-webpack-plugin')

module.exports = merge(common ,{
    entry:  {...},
    output: {...},
    module: {...}

    plugins: [ new CleanWebpackPlugin() ]
})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا از افزونه ای به نام استفاده کردیم clean-webpack-plugin. کاری که این افزونه انجام می دهد این است که هر بار که دستور ساخت خود را اجرا می کنیم، پوشه خروجی را تمیز می کند.

افزونه های زیادی وجود دارد که می توانید از آنها استفاده کنید. در صورت تمایل می توانید به وب سایت رسمی وب پک مراجعه کنید.

5. حالت

این یک مفهوم ساده برای درک است. شما می خواهید از یک راه اندازی متفاوت برای توسعه و تولید خود استفاده کنید. برای این، می توانید استفاده کنید mode.

module.exports = merge(common ,{
    entry:  {...},
    output: {...},
    module: {...},
    plugins:{...},

    mode : 'development' or 'production'
})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر حالت را روی production، سپس بسته خروجی شما کوچک و بهینه می شود.

6. سرور توسعه

این تنظیمات نهایی برای برنامه شما است. در حین توسعه برنامه، نمی خواهید هر بار که چیزی را تغییر می دهید، آن را کامپایل کنید. به همین دلیل شما نیاز به یک devServer راه اندازی برای برنامه شما

module.exports = merge(common ,{
    entry:  {...},
    output: {...},
    module: {...},
    plugins:{...},
    mode :  {...},

    devServer: {
        contentBase: path.join(__dirname, 'public/'),
        port: 3000,
        publicPath: 'http://localhost:3000/dist/',
        hotOnly: true,
    },
})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون این تنظیمات به برنامه شما از dist که قبلاً به عنوان خود تنظیم کرده اید output.

نتیجه

شما بروید. اکنون باید درک اولیه ای از وب پک و قسمت های مختلف آن داشته باشید. در اینجا یک راه اندازی کامل است اگر شما علاقه مند هستید:

const path =  require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = {
    entry: path.resolve(__dirname, 'src', 'index.js'),
    output: {
      path: path.resolve(__dirname, 'dist'),
      filename: 'bundle.js'
    },
    mode: 'development',
    module: {
        rules: [
            {
                test:  /\.[jt]sx?$/,
                use: ['babel-loader'],
                exclude: /node_modules/,
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.scss$/,
                use: ['style-loader', 'css-loader', 'sass-loader']
            },
            {
                test: /\.html$/,
                use: ['html-loader']
            }
        ]
    },
    plugins: [new CleanWebpackPlugin()],
    devServer: {
        contentBase: path.join(__dirname, 'public/'),
        port: 3000,
        publicPath: 'http://localhost:3000/dist/',
        hotOnly: true,
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روز خوبی داشته باشی!

چیزی برای گفتن داری؟ از طریق لینکدین یا وب سایت شخصی با من در تماس باشید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا