webpack4 вручную создает среду разработки Vue для реализации проекта todoList (1)

Vue.js

предисловие

Обычно при разработке работы мы обычно напрямую используем скаффолдинг Vue-cli для создания среды разработки Vue для повышения эффективности.Действительно, этот инструмент экономит нам много времени, но задумывались ли вы когда-нибудь о том, как строится среда разработки Vue? А если сам построишь, сможешь ли гладко построить?

Основываясь на этих идеях, я возился с webpack4 и запустил этот небольшой проект.Я чувствую, что небольшой проект все еще довольно большой, поэтому я написал статью и поделился своим опытом, ха-ха! !

Основываясь на проблемах с личным временем и энергией, это учебное пособие по проекту разделено на две части:

  • webpack4 вручную создает среду разработки Vue(эта статья)
  • Вручную создайте папку проекта Vue для реализации todoList(включая семейный сегмент Vue)

Надеюсь, вы сможете закончить туториал и получить то, что хотите, хи-хи, что ж, начнем! !

1. Создайте среду выполнения веб-пакета

Ввиду длины статьи в этом руководстве не будут подробно описываться знания о webpack 4. Если у вас есть какие-либо сомнения относительно этапов построения или у вас есть знания, которые вы не можете понять, вы можете сначала выполнить поиск в Google. .Скажу вам тихо, что у webpack4 еще есть много ям, но так называемый прогресс заключается в том, чтобы постоянно наступать на ямы (прикрывать лицо и выражение лица)! !

Инициализировать проект

запустить в командной строкеnpm init -yИнициальный проект, производствоpackage.jsonдокумент

Установить зависимости веб-пакета

npm i webpack webpack-cli --save-dev

Базовая конструкция каталога проекта

базовая конфигурация webpack.base.dev.js

Изменить команды сценария

изменениеpackage.jsonв файлеscriptsнастроить

запустить веб-пакет

существуетmain.jsвойти внутрьdocument.write("Hello World")

Настройте в соответствии с картинкой вышеwebpack.base.dev.jsдокумент

запустить в командной строкеnpm run testкоманда, в папке dist будут сгенерированы файлы js

существуетindex.htmlИмпорт, в случае успешного выводаHello WorldТо есть доказать, что среда Runtime Webpack успешно настроена ...

2. Начните создавать среду Vue

Среда запуска Vue делится на среду разработки и производственную среду.Различные среды имеют разные требования к реализации функций.Например,производственная среда должна сжимать код, а среда разработки нуждается в sourceMap для облегчения отладки, и эти две среды также имеют общую конфигурацию! !

Далее я потихоньку опишу функции, которые нужно реализовать в разных средах.

Создайте новый файл в сборке

  • webpack.base.conf.jsобщедоступный файл конфигурации
  • webpack.dev.conf.jsФайл конфигурации среды разработки
  • webpack.prod.conf.jsФайл конфигурации рабочей среды

общедоступный файл конфигурации

webpack.base.conf.jsЭто общедоступный файл конфигурации, который должен реализовать следующие функции:

  • обработка шрифтов
  • Обработка и оптимизация изображений
  • Идентифицировать файлы Vue
  • Включите транскодирование Babel для преобразования кода ES6 в ES5.
  • обработка музыкальных файлов
  • Настройте упакованный HTML-шаблон
  • Настроить разрешение модуля разрешения

существуетpackage.jsonвнутри файлаscriptsНастройте команду запуска скрипта:

"test":"webpack --config build/webpack.base.conf.js"

запустить в командной строкеnpm run testготов к запускуwebpack.base.conf.jsконфигурационный файл

Файл конфигурации среды разработки

webpack.dev.conf.jsЭто файл конфигурации среды разработки, в котором основное внимание уделяется эффективности отладки:

  • Упакуйте и обработайте файлы css и less, установите sourceMap для облегчения позиционирования и отладки.
  • postcss-loaderдобавить префикс автоматически
  • Настройте devServer для включения функции горячего обновления.

существуетpackage.jsonвнутри файлаscriptsНастройте команду запуска скрипта:

"dev":"cross-env NODE_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"

запустить в командной строкеnpm run devготов к запускуwebpack.dev.conf.jsконфигурационный файл

Файл конфигурации рабочей среды

webpack.prod.conf.jsэто файл конфигурации для производственной среды, ориентированный на минимизированный код и производительность:

  • Упаковка css и меньше файлов
  • mini-css-extract-pluginИзвлечь стили в отдельные файлы css
  • postcss-loaderдобавить префикс автоматически
  • clean-webpack-pluginОчищайте папку dist, создаваемую каждый раз, когда вы упаковываете
  • optimize-css-assets-webpack-pluginСжать код файла css
  • terser-webpack-pluginСжать код файла JS

существуетpackage.jsonвнутри файлаscriptsНастройте команду запуска скрипта:

"build":"cross-env NODE_ENV=production webpack --config build/webpack.prod.conf.js"

запустить в командной строкеnpm run buildготов к запускуwebpack.prod.conf.jsконфигурационный файл

3. Создайте общедоступную функцию файла конфигурации

Функции, которые необходимо реализовать в трех конфигурационных файлах, перечислены выше. Теперь просто следуйте функциям, чтобы собрать и настроить их. Хорошо, начнем! !

существуетwebpack.base.conf.jsЗапустите функцию общедоступной конфигурации внутри

Настроить обработку шрифтов, картинок, музыкальных функций

Для обработки шрифтов, картинок и музыки необходимо установить соответствующие зависимости

npm i url-loader file-loader --save-dev

Код конфигурации выглядит следующим образом

const path = require('path');

module.exports = {
    entry: path.resolve(__dirname, '../src/main.js'),
    output: {
        filename: 'js/[name].[hash:5].js',
        path: path.resolve(__dirname, '../dist'),
        publicPath: './'
    },
    module: {
        rules: [
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                use: [{
                        loader: 'url-loader',
                        options: {
                            limit: 10000,
                            name: 'img/[name]-[hash:5].[ext]',
                        }
                    }
                ]
            },
            {
                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: 'fonts/[name]-[hash:5].[ext]',
                }
            },
            {
                test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 4096,
                            name: 'media/[name]-[hash:5].[ext]',
                        }
                    }
                ]
            }
        ]
    },
}

url-loaderа такжеfile-loaderФункции аналогичны, вся обработка изображений, иконок шрифтов и прочих файлов в webpack

Отношения между ними являютсяurl-loaderупакованныйfile-loader,ноurl-loaderне зависит от файлового загрузчика

url-loaderИзображение может быть обработано атрибутом предела.Когда изображение меньше предела (единица измерения: байт), оно преобразуется в base64 и вызывается, когда превышает предел.file-loaderОбработайте изображение.

Код ES6 в ES5

Тут я плюнул немного горечи.Когда я научился использовать babel для настройки кода конвертации ES6, я действительно много думал.После его настройки я долго не мог понять какая связь со многими загрузчиками( Закрывая лицо) Позже я прочитал официальный сайт, понятно только, чтобы отличить его от чужих блогов~~~ Ладно, начнем! !

Сначала установите соответствующий загрузчик

npm i babel-loader @babel/core @babel/polyfill @babel/preset-env core-js@3 --save-dev

  • babel-loaderПоддерживает только преобразование синтаксиса ES6, но не поддерживает недавно добавленный API ES6.
  • babel-polyfillМожно добавить новые API ES6, чтобы клиенты могли поддерживать
  • babel-preset-envНастраиваемая среда выполнения для совместимости с JS
  • babel-coreАнализировать код js в ast, что удобно каждому плагину для анализа синтаксиса соответствующей обработки

см. код конфигурации

Эта конфигурация поддерживает только преобразование синтаксиса ES6 и не поддерживает новые API ES6.

во входном файлеmain.jsдобавить внутрьimport @babel/polyfill

Таким образом, вы можете использовать недавно добавленный API ES6, но вы обнаружите, что упакованный файл JS относительно велик, и есть много API ES6, которые вы не используете, поэтому вам нужно импортировать его по мере необходимости в это время. .

Создать в корневом каталогеbabel.config.jsфайл, задайте в нем конфигурацию

Ну это можно ввести по требованию, что может сильно уменьшить размер запакованного JS файла.Ну наконец-то я разобрался с очками знаний(закрывая лицо)(бедное лицо)~~~

Настройте упакованный файл Vue

Сначала установите зависимости

npm i vue vue-loader vue-template-compiler --save-dev

существуетsrcСоздайте новый файл Vue в папкеApp.vue

существуетmain.jsВведите Vue в файл записи и смонтируйте его на узле.

Хорошо, начните упаковывать конфигурацию файла Vue.

Это хорошо, я чувствую, что код для упаковки Vue и монтирования узлов — это настоящее чувство.

Настроить страницу шаблона html

Установить зависимости

npm i html-webpack-plugin --save-dev

Используйте HTML-Webpack-плагин для создания HTML-страниц и автоматически импортировать упакованные файлы

const HtmlWebpackPlugin = require('html-webpack-plugin');

plugins: [
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname,'../index.html'),
            filename: 'index.html'
        }),
    ]

Конкретную конфигурацию см. в документации по npm.

Ууууу, эта лошадь plus.com/package/htm…

Настроить разрешение модуля разрешения

Настройте эффективность извлечения удобного пути псевдонима и расширения файла конфигурации по умолчанию.

    resolve: {
        extensions: ['.js','.json','.vue'],
        alias: {
            '@': path.resolve(__dirname,'../src')
        }
    }

"@":"指向src文件夹"

Итак, публичная часть конфигурационного файла завершена, теперь приступайте к настройке окружения! ! !

запустить в командной строкеnpm run test, который может запускать общедоступные профили

В-четвертых, конфигурация производственной среды

Ладно, начинаем стучать! ! !

существуетwebpack.prod.conf.jsнастроить в файле

определить переменные среды

предоставляется в веб-пакетеDefinePluginПлагины могут легко определять переменные среды

plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: JSON.stringify('production')
            }
        }),
    ],

Обработка css и меньше файлов

Для обработки файлов css и less в производственной среде вам необходимо извлечь стиль css в отдельный файл css.

И автоматически добавить префикс, sourceMap

Обработка css и меньше файлов

npm i css-loader less less-loader --save-dev

добавить префикс автоматически

npm i postcss-loader autoprefixer --save-dev

Извлечение стилей css в отдельные файлы css

npm i mini-css-extract-plugin --save-dev

Длина слишком велика, чтобы делать скриншоты, просто перейдите к коду

const webpackConfig = require('./webpack.base.conf');
const merge = require('webpack-merge');
const webpack = require('webpack');
//抽离CSS样式
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = merge(webpackConfig,{
    mode: 'production',
    devtool: 'cheap-source-map',
    module: {
        rules: [
            {
                test: /\.(c|le)ss$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                        options: {
                            publicPath: '../'
                        }
                    },
                    {
                        loader: 'css-loader'
                    },
                    {
                        loader: 'postcss-loader',
                        options: {
                            ident: 'postcss',
                            sourceMap: true,
                            plugins: loader=>[
                                require('autoprefixer')({
                                    browsers: [
                                        "last 2 versions",
                                        "> 1%"
                                    ]
                                })
                            ]
                        }
                    },
                    {
                        loader: 'less-loader'
                    }
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: 'css/[name]-[hash:5].css',
            chunkFilename: 'css/[id]-[hash:5].css',
        }),
    ],
}

чистый пакет создать папку

В процессе упаковки вы обнаружите, что папка dist будет продолжать добавлять файлы после каждой упаковки.Очевидно, что нам нужно разобраться с этим аспектом.

Установить связанные зависимости

npm i clean-webpack-plugin --save-dev

//清理dist
const CleanWebpackPlugin = require('clean-webpack-plugin');

plugins: [
    new CleanWebpackPlugin(),
],

Сжать код js и css

Сжать css-код

npm i optimize-css-assets-webpack-plugin --save-dev

Сжать js-код

npm i terser-webpack-plugin --save-dev

Как использовать

    optimization: {
        minimizer: [
            //压缩css
            new OptimizeCssAssetsWebpackPlugin({}),
            // 压缩JS
            new TerserWebpackPlugin({
                cache: true,
                parallel: true,
                sourceMap: true,
            }),
            //具体更多配置可以查看官网
        ]
    }

запустить в командной строкеnpm run buildМожет запускать файл конфигурации среды разработки

Ну и после разговора о настройке среды разработки перейдем к настройке производственной среды.

Пять, конфигурация среды разработки

существуетwebpack.dev.conf.jsнастроить в файле

Немного устал (закрывает лицо)

определить переменные среды

Как и в производственной среде, первое, что нужно сделать, это определить переменные среды.

new webpack.DefinePlugin({
    'process.env': {
        NODE_ENV: JSON.stringify('development')
    }
}),

Обработка css и меньше файлов

CSS и меньше в среде разработки не нужно извлекать стили, нужно только добавить префикс и sourceMap для облегчения отладки

Установить зависимости

Обработка css и меньше файлов

npm i style-loader css-loader less less-loader --save-dev

добавить префикс автоматически

npm i postcss-loader autoprefixer --save-dev

const webpackConfig = require('./webpack.base.conf.js');
const merge = require('webpack-merge');
const path = require('path');
const webpack = require('webpack');

module.exports = merge(webpackConfig,{
    mode: 'development',
    // source-map,将编译后的代码映射到原代码,便于报错后定位错误
    devtool: 'inline-source-map',
    module: {
        rules: [
            {
                test: /\.(c|le)ss$/,
                use: [
                    {
                        loader: 'style-loader',
                        options: {
                            sourceMap: true
                        }
                    },
                    {
                        loader: 'css-loader',
                        options: {
                            sourceMap: true,
                        }
                    },
                    {
                        loader: 'postcss-loader',
                        options: {
                            ident: 'postcss',
                            sourceMap: true,
                            plugins: loader=>[
                                require('autoprefixer')({
                                    browsers: [
                                        "last 2 versions",
                                        "> 1%"
                                    ]
                                })
                            ]
                        }
                    },
                    {
                        loader: 'less-loader',
                        options: {
                            sourceMap: true
                        }
                    }
                ]
            }
        ]
    },
}

настроить devServer

На вебпаке можно включить режим горячего обновления, что значительно ускоряет эффективность открытия.

Установить связанные зависимости

npm i webpack-dev-server --save-dev

код выше

    //具体更多配置可以参考官网
    devServer: {
        contentBase: path.resolve(__dirname,'../dist'),
        // hot: true,
        port: 9090,
        overlay: {
            warnings: true,
            errors: true
        },
        publicPath: '/'
    }
    
    plugins: [
        // 启用模块热替换(HMR)
        new webpack.HotModuleReplacementPlugin(),
        // 当开启 HMR 的时候使用该插件会显示模块的相对路径,建议用于开发环境。
        new webpack.NamedModulesPlugin(),
    ],

Таким образом, вы можете выполнять отладку онлайн без ручного обновления! ! Уи

Ок, настройка среды разработки также завершена.

Введите в командной строкеnpm run devМожет запускать профили производственной среды

6. Резюме

После настройки всей среды разработки Vue я чувствую, что многому научился, а также имею общее представление о настройке функции webpack4.

Хотя до Vue-cli еще далеко, иногда приятно повозиться с мелочью! !

Ну, на этом эта статья заканчивается.Из-за моего ограниченного уровня, если есть какая-то ошибка, пожалуйста, укажите на нее вовремя и развивайтесь друг с другом, ха-ха! ! Спасибо, ребята (улыбается)

В следующей статье я буду использовать созданную на этот раз среду разработки Vue для написанияtodoListпроект

Я считаю, что todoList не чужд всем, но один и тот же проект можно написать по-разному, поэтому в следующей статье я продолжу вручную собирать папку Vue, чистым почерком, используяvue-router. vuexДля достижения, я считаю, это поможет всем, ну и кончено! !

исходный код на гитхабе:Исходный код этого урока

следующая статьяВручную создайте проект Vue, продолжение следует~~~