webpack4手动搭建Vue开发环境完整指南
本文详细记录了使用webpack4手动搭建Vue开发环境的全过程。内容涵盖项目初始化、公共配置(文件处理、ES6转码、Vue解析)、开发环境(热更新、sourceMap)及生产环境(代码压缩、样式抽离)的配置细节,旨在帮助开发者深入理解前端构建流程。
前言
在实际项目开发中,为了提升效率,我们通常直接使用Vue-cli脚手架来搭建Vue开发环境。这种工具确实为我们节省了大量时间,但你是否思考过Vue开发环境的具体搭建过程?如果由你亲自动手搭建,能否顺利完成?
基于上述思考,我尝试使用webpack4进行实践,并完成了这个小项目。整个过程中收获颇丰,因此撰写本文分享心得。
受限于个人时间与精力,本教程分为两部分:
- webpack4手动搭建Vue开发环境(本文重点)。
- 手动搭建Vue项目文件夹实现todoList(包含Vue全家桶)。
希望读者能完整阅读教程,获取所需知识。接下来开始正式内容。
搭建webpack运行环境
一、搭建webpack运行环境
鉴于文章篇幅,本教程不会深入讲解webpack4的所有知识点。若对搭建步骤有疑问或看不懂某些配置,建议先自行搜索了解。webpack4在实际使用中确实存在不少坑,但进步往往源于不断踩坑的过程。
初始化项目
在命令行中运行 npm init -y 初始化项目,生成 package.json 文件。
安装webpack依赖
npm i webpack webpack-cli --save-dev
基本项目目录搭建
webpack.base.dev.js基本配置
修改脚本命令
在修改 package.json 文件里的 scripts 配置。
运行webpack
在 main.js 里面输入 document.write("Hello World")。
根据上述图片配置 webpack.base.dev.js 文件。
在命令行中运行 npm run test 命令,dist文件夹里会有js文件生成。
在 index.html 引入,若成功输出 Hello World 即证明webpack运行环境配置成功。
搭建Vue环境
二、开始搭建Vue环境
Vue运行环境分为开发环境和生产环境,不同环境对功能实现的要求不同。例如,生产环境需要压缩代码,而开发环境需要sourceMap以便调试,同时两者也有公共配置部分。
接下来将逐步讲解不同环境所需实现的功能。
在build里面新建文件
- webpack.base.conf.js 公共配置文件。
- webpack.dev.conf.js 开发环境配置文件。
- webpack.prod.conf.js 生产环境配置文件。
公共配置文件
webpack.base.conf.js 是公共配置文件,需要实现以下功能:
- 字体处理。
- 处理图片以及优化。
- 识别Vue文件。
- 启用babel转码,把ES6转换ES5代码。
- 音乐文件处理。
- 配置打包后的html模板。
- 配置resolve模块解析。
在 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和less文件。
- 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 配置文件。
公共配置文件功能
三、搭建公共配置文件功能
上面列出了三个配置文件需要实现的功能,现在只需按功能进行搭建和配置。
在 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 并不依赖于file-loader。
url-loader 可以通过limit属性对图片分情况处理,当图片小于limit(单位:byte)大小时转base64,大于limit时调用 file-loader 对图片进行处理。
ES6转换ES5代码
在学习使用babel配置ES6转换代码时,确实费了不少心思,配置了很久,很多loader的关系也不清楚。后来查阅官网和博客才理清。
首先要安装相关loader。
npm i babel-loader @babel/core @babel/polyfill @babel/preset-env core-js@3 --save-dev
- babel-loader只支持ES6语法转换,但是不支持ES6新增加的API。
- babel-polyfill可以添加ES6新增加API,让客户端支持。
- babel-preset-env可以配置让JS兼容的运行环境。
- babel-core把js 代码分析成 ast ,方便各个插件分析语法进行相应的处理。
看配置代码。
这样子配置只支持ES6语法转换,不支持ES6新增加API。
在入口文件 main.js 里面添加 import @babel/polyfill。
这样子就可以使用ES6新增加的API了,但是你会发现打包后的JS文件比较大,而且里面有很多ES6的API也是你没用到的,所以这时候你需要做到按需引入。
在根目录下创建 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-plugin来创建html页面,并自动引入打包生成的文件。
const HtmlWebpackPlugin = require('html-webpack-plugin');
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname,'../index.html'),
filename: 'index.html'
}),
]
具体配置可以查看npm文档。
https://www.npmjs.com/package/html
配置resolve模块解析
配置alias方便路径的检索效率以及配置文件默认扩展名。
resolve: {
extensions: ['.js','.json','.vue'],
alias: {
'@': path.resolve(__dirname,'../src')
}
}
"@":"指向src文件夹"
好了,到这里为止,已经完成了配置文件的公共部分了,接下来开始针对环境进行配置了。
在命令行上运行 npm run test ,可以运行公共配置文件。
生产环境配置
四、生产环境配置
好了,直接开敲。
在 webpack.prod.conf.js 文件里面进行配置。
定义环境变量
webpack里面提供了 DefinePlugin 插件可以方便定义环境变量。
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
}
}),
],
处理css和less文件
生产环境处理css和less文件需要把css样式提取出来到一个独立的css文件里面。
并且自动添加前缀,sourceMap。
处理css和less文件
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和less文件
开发环境下的css和less不需要提取样式,只需要添加前缀和sourceMap方便调试。
安装依赖。
处理css和less文件
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
webpack上可以开启热更新模式,大大加速开大效率。
安装相关依赖。
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 可以运行生产环境配置文件。
六、总结
整个Vue开发环境配置下来,感觉学到的东西还是挺多的,对webpack4功能的配置也有了大致的认识。
虽然跟Vue-cli相比还是差太远,但是有时候弄点小东西折腾一下感觉还是不错的。
好了,本编文章就到此为止,由于本人水平有限,如果有什么错误,请及时指出,彼此好好进步。
下篇文章我将用这次搭建的Vue开发环境去编写 todoList 项目。
我相信大家对todoList并不陌生,但是同一个项目可以有不同的写法的,所以下篇文章我也会继续手动搭建Vue文件夹,纯手写,用 vue-router . vuex 来实现,相信会对大家有帮助。
github源码:https://github.com/Zero-jian/webpack
下篇文章 手动搭建Vue项目 ,未完待续。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
Vue 3 核心变化解析:Composition API 与响应式系统详解
2026-11-03 21:33:38
viewer.js v1 升级到 v2 需要注意哪些 API 变更
2026-11-03 20:42:00
Vue3 与 React 中怎么封装 hls.js 播放器组件
2026-11-03 11:13:51
Vue.js官网访问慢或打不开怎么办?国内镜像与GitHub备用方案
2026-11-02 09:19:09
利用Axios实现无感知双Token刷新的详细教程
2026-11-01 03:11:12








