webpack如何快速入门和上手?看这篇就会了

前言

本文我们将会从环境搭建、服务器配置、常用Loader、常用插件生产打包等方面,一步步详细的介绍Webpack工具的使用,目标是希望可以让大家快速入门和应用。
关于Webpack官网介绍是这样的:它是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

1、环境搭建

1.1、目录结构

在介绍具体操作步骤之前,我们先看一下本文示例的最终效果,src是源码文件目录,dist是打包文件目录,其它是相关的配置文件,后面都会陆续介绍。
在这里插入图片描述

1.2、安装Node

node中文网下载对应版本进行安装,然后在dos窗口中分别使用node -vnpm -v命令查看版本,如果正常输出版本则说明安装成功。
在这里插入图片描述
这里我们先执行命令npm install -g cnpm --regisrty=https://registry.npm.taobao.org指定淘宝镜像,后续使用cnpm安装其它依赖时效率更高。
在这里插入图片描述

1.3、安装全局依赖

安装两个全局依赖,执行命令cnpm install -g webpackcnpm install -g webpack-cli

1.4、项目初始化

在webpack目录下,执行命令cnpm init -y,生成package.json文件,该文件用于管理项目的依赖信息和描述信息。

1.5、安装项目依赖

在webpack目录下,安装两个项目依赖,执行命令cnpm install --save-dev webpackcnpm install --save-dev webpack-cli

1.6、创建src与dist

在webpack项目下分别创建src目录和dist目录,src中存放源码文件,dist中存放打包编译后的文件。

1.7、编写测试代码

src下创建app.jsdata.js文件,编写测试代码,并输出Test webpack文本。
app.js

var div = require("./data");
document.getElementsByTagName("body")[0].appendChild(div());

data.js

module.exports = function(){
    var div = document.createElement("div");
    div.textContent = "test webpack";
    return div;
};

1.8、创建webpack.config.js

在webpack中创建webpack.config.js配置文件,entry表示打包入口文件,output指定输出目录和文件名称。这里意思是将src目录下的app.js等文件打包为bundle.js文件,并输出到dist中。

var path = require("path");
module.exports = {
    entry:"./src/app.js",   //入口文件
    output:{
        path:path.resolve(__dirname,"dist"),    //__dirname表示当前路径
        filename:"bundle.js"
    }
};

1.9、执行webpack命令打包

在webpack目录下执行命令webpack,进行打包,可以看到打包成功,在dist目录下生成了bundle.js文件。
但是控制台也输出了警告信息The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults for each environment.,意思是打包没有指定开发模式还是生产模式,如果是开发模式,生成的bundle.js文件不会做压缩处理,支持调试,文件体积较大;生产模式则会压缩,且体积较小。
在这里插入图片描述

1.10、警告信息处理的两种方式

方式一:在webpack.config.js中指定mode为development(开发模式)或production(生产模式)。

var path = require("path");
module.exports = {
    entry:"./src/app.js",   //入口文件
    output:{
        path:path.resolve(__dirname,"dist"),    //__dirname表示当前路径
        filename:"bundle.js"
    },
    mode: 'production' // 设置mode
};

方式二:在package.json中增加"dev": "webpack --mode development""build": "webpack --mode production"命令,那么打包时,如果选择开发模式则使用npm run dev,选择生产模式使用npm run build

{
  "name": "webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11"
  }
}

1.11、效果查看

dist目录下创建index.html模板,并引入bundle.js文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test webpack</title>
</head>
<body>
    <script src="bundle.js"></script>
</body>
</html>

在浏览器中访问index.html,可以看到bundle.js中的脚本内容渲染成功,至此,说明我们的webpack环境搭建成功了。
在这里插入图片描述

2、服务器配置

在实际开发过程中,我们通过会使用服务器模式,这样方便且效率更高。

2.1、安装依赖

执行命令cnpm install -g webpack-dev-servernpm install --save-dev webpack-dev-server

2.2、启动测试

执行webpack-dev-server命令(默认启用8080端口)
在这里插入图片描述
在浏览器中访问http://localhost:8080/地址,可以看到webpack项目根目录,说明服务是可用的。但实际上我们希望访问的资源在dist文件夹中,其它的资源并不需要浏览访问。
在这里插入图片描述

2.3、指定默认访问dist/路径

webpack.config.js中增加如下配置,即可直接映射到dist目录中

 devServer:{
        contentBase:"./dist"
    }

再次访问效果
在这里插入图片描述

2.4、修改启动命令

之前我们在package.json中指定了开发模式,所以可以通过npm run xxx的方式打包。这里我们将"dev": "webpack --mode development"修改为"dev": "webpack-dev-server --mode development",即可执行npm run dev命令启动服务。

2.5、热更新模式

在开启热更新前,每次修改代码后,我们需要手动刷新浏览器才能生效。启用热更新后,页面内容则会自动更新,提高开发效率。
具体做法:在webpack.config.js文件的devServer{}中,将hot属性指定为true,重启服务即可

	devServer:{
        contentBase:"./dist",
        hot:true
    }

3、常用Loader

3.1、babel-loader引入

安装依赖:执行命令cnpm install --save-dev babel-loader @babel/core @babel/preset-env
增加配置:在webpack.config.js中增加如下规则配置

// loaders
    module: {
        rules: [
            // es6 -> es5
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    }

3.2、CSS处理

安装依赖:执行命令cnpm install --save-dev style-loader css-loader
增加配置:在webpack.config.js的module中增加如下配置规则

	{
         test:/\.css$/,
         use:['style-loader','css-loader']
    }

创建文件:在src目录下创建css文件夹,在创建app.css文件,并编写一个字体设置样式
在这里插入图片描述

*{
    font-size:50px;
    color: #ff0000;
}

文件引入:在app.js中使用import引入app.css文件

import './css/app.css';

var div = require("./data");
document.getElementsByTagName("body")[0].appendChild(div());

效果查看:重启服务访问
在这里插入图片描述

3.3、Image处理

安装依赖:执行命令cnpm install --save-dev file-loader
增加配置:在webpack.config.js的module中增加如下配置规则

	{
         test:/\.(png|svg|jpg|gif)$/,
         use:'file-loader'
     }

创建文件:在src目录下创建images文件夹,然后存入一张test.jpg图片
在这里插入图片描述
文件引入:在app.js中使用import引入图片文件,并编写渲染测试代码

import test from './images/test.jpg';

//图片加载
var testImage = new Image();
testImage.src = test;
document.getElementsByTagName("body")[0].appendChild(testImage);

效果查看:重启服务访问
在这里插入图片描述

3.4、字体图标

安装依赖:执行命令cnpm install --save-dev url-loader
增加配置:在webpack.config.js的module中增加如下配置规则

	{
         test: /\.(woff|woff2|eot|ttf|otf)$/,
         use:'file-loader'
     }

创建文件:在css目录下创建font文件夹,并引入字体样式
在这里插入图片描述
文件引入:在app.js中使用import引入iconfont.css文件,并编写渲染测试代码

import './css/font/iconfont.css'

//字体图标加载
var font = document.createElement("span");
font.className ='iconfont icon--plus1';
document.getElementsByTagName("body")[0].appendChild(font);

效果查看:重启服务查看
在这里插入图片描述

3.5、Less处理

安装依赖:执行命令cnpm install --save-dev less less-loader
增加配置:在webpack.config.js的module中增加如下配置规则,它的使用方法和css一样

	{
         test:/\.less$/,
         use: ['style-loader', 'css-loader', "less-loader"]
    }

4、常用插件

4.1、自动打开浏览器插件

安装依赖:执行命令cnpm install -D open-browser-webpack-plugin
增加配置:在webpack.config.js中增加如下配置

var openBrowser = require("open-browser-webpack-plugin");

module.exports = {}中增加,再次启动服务时,会自动打开浏览器

	plugins:[
        new openBrowser({
            url:"http://localhost:8080"
        })
    ]

4.2、HTML模板插件

安装依赖:执行命令cnpm install -D html-webpack-plugin
增加配置:在webpack.config.js的plugins中增加如下配置

var htmlWebpackPlugin = require("html-webpack-plugin");
	new htmlWebpackPlugin({
        template: "./src/index.temp.html"
    })

创建文件:在src目录下创建index.temp.html
删除目录:删除dist目录
效果查看:重启服务,在没有dist目录情况下,同样可以正常加载页面。原因是使用该插件后,我们将进入开发中状态,也就是说本地的服务器中增加可访问的环境,项目中不需要自己创建dist目录了。

5、生产打包

执行命令:在webpack目录下执行npm run build
生成文件:执行成功后,会自动生成dist目录及对应资源文件
发布生产:将dist目录发布到Linux环境进行部署
在这里插入图片描述

后记

以上就是Webpack从环境搭建到打包上线的主体操作流程,当然,在实际项目中,我肯定是结合Vue、React等框架进行开发的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值