webpack的使用和打包

概念

本 质上,webpack是一个现代 JavaScript 应用程序的 静态模块打包器(module bundler) 。

当 webpack 处理应用程序时,它会递归地构建一个 依 赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle 。

一、webpack第一次安装和打包

安装

先确保你已经安装了nodejs, 接着新建一个项目目录如:

cd mypack
// 进入你的项目目录 mypack目录可以随意自己建立

npm init  
//  初始化项目文件夹 会创建一个package.js

npm i webpack webpack-cli -D
//安装wewebpack 和 webpack-cli

生成以下文件

在根目录下在创建一个src文件,在此文件中创建header.js 和 index.js 

 header.js

var elem = document.createElement("div");//创建一个节点
elem.innerHTML = "你好,webpack";//设置内容
export default elem;//导出节点

index.js

import elem from "./header.js";//导入节点
document.body.appendChild(elem);//插入到页面

在命令提示符输入 npx webpack 进行打包

C:\myback>npx webpack
//输入完后根目录会生成一个dist文件,文件里会有一个main.js

在dist文件中新建一个index.html ,在body下方插入

<script src="./main.js"></script>

这样的话,在浏览器里打开index.html就会看到  你好,webpack  了。

二、使用配置文件

在项目目录 新建一个  webpack.config.js    webpack默认配置文件

module.exports = {
    // 指定文件的入口
    entry: "./src/index.js",
    //出口
    output: {
        // 定义文件名
        filename: "main.js",
        // 定义文件夹  // __dirname获取当前目录
        path: __dirname + "dist",
    },
    mode: "production", //产品模块
};
// module.export node中导出模块的意思

执行命令npx webpack实现打包,就不会出现第一次打包的警告了。

使用 webpack-dev-server 重启服务器进行更新

安装

npm i webpack-dev-server  html-webpack-plugin  -D

在根目录里创建一个public文件夹,在此文件夹中在建立一个index.html  

在 package.json 的 script 里的添加  "build": "webpack",  "serve": "webpack serve",例

"scripts": {
        "build": "webpack",
        "serve": "webpack serve",
        "test": "echo \"Error: no test specified\" && exit 1"
},

在  webpack.config 里导入插件 

//导入插件
const HtmlWebpackPlugin = require("html-webpack-plugin");

实例化插件 

plugins: [
        // 实例化vue插件
        new HtmlWebpackPlugin({
            //指定模板
            template: "./public/index.html",
        }),
    ],

接着再添加

 devServer: {
        open: true, //打开浏览器
        host: "localhost", //本地域名
        port: 8080, //端口号
        hot: true, //热加载
    },

下面这是webpack.config 里的全部内容

//导入插件
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
    // 指定文件的入口
    entry: "./src/index.js",
    //出口
    output: {
        // 定义文件名
        filename: "main.js",
        // 定义文件夹  // __dirname获取当前目录
        path: __dirname + "dist",
    },
    plugins: [
        // 实例化vue插件
        new HtmlWebpackPlugin({
            //指定模板
            template: "./public/index.html",
        }),
    ],
    mode: "production", //产品模块
    devServer: {
        open: true, //打开浏览器
        host: "localhost", //本地域名
        port: 8080, //端口号
        hot: true, //热加载
    },
};
// module.export node中导出模块的意思

启动:npm run serve     这样页面就显示出来了。 

补充知识

webpack核心概念   

entry //入口

//指定文件的入口
entry:{}

 output //输出

{
path:__dirname+"/dist",
filename:"main.js"
}

mode //模式 

 mode: "production", //产品模式 development

 loader  //加载器   

定义:让webpack拥有处理非js的文件

style-loader:把css插入到style标签
css-loader:加载css

安装:

npm i style-loader css-loader -D

 配置文件:

// 模块
	module:{
		// 规则
		rules:[
			{
			//测试.css文件结尾
			test:/\.css$/,
			// 使用两个loader加载器
			use:["style-loader","css-loader"],
			
			}
		]
	}

 plugins  插件

定义:处理内容外在webpack处理过程中额外操作,加载模板,压缩,服务器。。。。

安装:

npm i html-webpack-plugin 
//把html模板文件加载到dist目录,并插入打包好的js

配置 :

const htmlWebpackPlugin = require("html-webpack-plugin")

plugins:[
    new htmlWebpackPlugin({
        template:"./public/index.html"
     })
]

安装:

npm i file-loader url-loader -D
//file-loader:加载文件
//url-loader:基于file-loader  如果文件比较小 转成base64格式 减少http请求的次数

npm i clean-webpack-plugin -D
//清理 dist 目录

 优化css插件:

npm i optimize-css-assets-webpack-plug -D

 在webpack.config.js 中导入

const optimizeCss = require('optimize-css-assets-webpack-plugin')

// 优化选项
	optimization: {
		// 压缩
	    minimizer: [ new optimizeCss()],
	}, 

如何单独抽出单独的  .css 文件

npm i mini-css-extract-plugin -D

在webpack.config.js 中导入

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

在 plugins 使用

 new MiniCssExtractPlugin({
            filename: "style-[hash:7].css",
        }),

css优化,js压缩优化:

npm i optimize-css-assets-webpack-plugin terser-webpack-plugin -D
//optimize-css-assets-webpack-plugin  css优化
//terser-webpack-plugin   js压缩优化
导入:
//导入css压缩插件
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
//导入js压缩插件
const TerserWebpackPlugin = require("terser-webpack-plugin");

下面这个是在module.exports里 不是在plugins 

使用:
// 优化选项
module.exports = {
    optimization: {
        minimizer: [new CssMinimizerPlugin(), new TerserWebpackPlugin()],
    },
}
 

 webpack优化

hash //哈希

内容相同,文件名称也就相同,如果浏览器已经请求过同样的名称,浏览器二次请求会从缓存里面取

hash  //打包的变化算出一段字符
contentHash //内容内容变化算出一段字符
chunkHash   //根据入口文件算出一段字符串

压缩

压缩css  optimize-css-assets-webpack-plug
压缩js    terser-webpack-plugin

分割 大文件拆分

optimization: {
		// 代码分割
		splitChunks: {
		    chunks: "all", 
		},
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值