当前位置: 首页 > news >正文

day28JS+Node-JS打包工具Webpack

1. 什么是Webpack

在 Node.js 环境下使用的 Webpack 是一个基于 JavaScript 的 静态模块打包工具(Static Module Bundler),它运行在 Node.js 环境中,但主要用于构建和优化前端项目(如 React、Vue 等)。

Webpack 是一个 npm 包(通过 npm install webpack 安装),运行在 Node.js 环境中,但生成的是前端代码(如浏览器可运行的 JS、CSS、HTML)。

2. Webpack 的核心功能

  • 将分散的前端模块(JS、CSS、图片等)打包成少数优化后的文件。

  • 处理依赖关系、代码转译(如 Babel)、资源加载(如 CSS/图片)等。

3. Webpack基本配置

3.1 以下是需要下载的插件

1.webpage拷贝插件
"copy-webpack-plugin": "^6.4.1",2.webpack的html生成插件
"html-webpack-plugin": "^4.5.1",3.webpack插件
"webpack": "^4.46.0",4.webpack命令插件
"webpack-cli": "^3.3.12",5.webpack静态服务插件
"webpack-dev-server": "^3.11.2"6.art模板和模板加载插件
"art-template":"^4.13.2"
"art-template-loader":"^1.4.3"7.用于清除因配置hash名而产生上次生成的同样文件
"clean-webpack-plugin":"^3.0.0"8.用于对于js中import引入的css做解析
"css-loader":"^5.0.2"
"style-loader":"^1.3.0"9.页面用bootstrap框架"bootstrap": "^4.6.0",10. 基于jquery"jquery": "^3.5.1",11.前端页面使用的router路由  "sme-router": "^0.12.8"

3.2 webpack4 具体的配置信息

先创建一个webpack.config.js ,webpack4 具体内容如下:

var path = require("path");
var HtmlWebpackPlugin = require("html-webpack-plugin");
var CopyPlugin = require("copy-webpack-plugin");
var {CleanWebpackPlugin}=require("clean-webpack-plugin");
module.exports = {1. 开发环境或者生产环境mode: "development",2. 生成map映射文件,当项目被打包后会压缩,// 有这个map文件就可以更精准的知道是哪个地方出现了错误devtool: "source-map",3. 限制打包文件内容过大performance: {hints: false},4. 入口,在整个html页面中执行的入口js文件//前面是编译过的地址,后面是编译前的地址entry: {"js/app": "./src/app.js"},5. 出口配置,自动生成压缩后的文件夹output: {// 输出路径path: path.join(__dirname, "./dist"),// 输出生成的js文件,在这里[name]是原文件名是什么就导出对应的名字//[hash:6] 自动增加尾缀hash值用来区分上一次的文件,减少因为缓存引入上次的文件问题filename: "[name]-[hash:6].js"},6.模块module: {rules: [//配置art-template-loader模块,用于加载所有.art的文件并且根据需求加载完成后解析{ test: /\.art$/, use: { loader: "art-template-loader" } },//配置CSS文件的import引入和解析{ test: /\.css$/i,use: ["style-loader", "css-loader"] }]},7. webpage提供的插件plugins: [// 用于自动构建html页面的插件new HtmlWebpackPlugin({// 网页源目录template: path.join(__dirname, "./public/index.html"),// 目标文件名app: "index.html",// 注入jsinject: true}),8. 用于复制源文件夹中指定的文件new CopyPlugin({// 插件配置  from从某文件夹复制,to到某文件夹patterns: [{ "from": "./public/img", "to": path.join(__dirname, "./dist/img/") },{ "from": "./public/css", "to": path.join(__dirname, "./dist/css/") },{ "from": "./public/js", "to": path.join(__dirname, "./dist/js/") },{ "from": "./public/fonts", "to": path.join(__dirname, "./dist/fonts/") }]}),9.清除上次因为使用hash名称产生的相同文件   "[name]-[hash:6].js"这里配置造成new CleanWebpackPlugin()],10. 设置服务配置,开启静态服务devServer: {// 目标静态服务器地址指向的文件夹contentBase: path.join(__dirname, "./dist"),// 端口号port: 4001,//设置代理服务,解决跨域问题proxy:{"/api":{target:"http://localhost:3000"}}}
}

3.3  webpack5 具体的配置信息 

webpack5具体配置如下:
import path from "path";
import HTMLWebpackPlugin from "html-webpack-plugin";
import {CleanWebpackPlugin} from "clean-webpack-plugin";
export default {1. 开发环境或者生产环境mode:"production",2.生成map映射文件,当项目被打包后会压缩,// 有这个map文件就可以更精准的知道是哪个地方出现了错误devtool:"source-map",3. 取消限制打包文件内容过大performance: {hints: false},4. 入口,在整个html页面中执行的入口js文件//前面是编译过的地址,后面是编译前的地址entry:{"./js/app":"./src/index.js"},5. 出口配置,自动生成压缩后的文件夹output:{// 输出路径path:path.join(path.resolve(),"./dist"),// 输出生成的js文件,在这里[name]是原文件名是什么就导出对应的名字//[hash:] 自动增加尾缀hash值用来区分上一次的文件,减少因为缓存引入上次的文件问题filename:"[name]-[fullhash].min.js"},module:{rules:[//配置解析stylus,并且导入{test:/\.styl$/i,use:["style-loader","css-loader","stylus-loader"]},//配置解析art{test:/\.art$/i,use:{loader:"art-template-loader"}},//配置解析svg格式文件{test:/\.svg$/i,type: 'asset'}]},plugins:[// 用于自动构建html页面的插件new HTMLWebpackPlugin({// 网页源目录template:path.join(path.resolve(),"./src/index.html"),// 注入jsinject:true}),6.清除上次因为使用hash名称产生的相同文件   "[name]-[fullhash].js"这里配置造成new CleanWebpackPlugin()],devServer:{7.创建静态服务资源static:{//静态资源路径directory:path.join(path.resolve(),"./public"),//服务器打开路径publicPath:path.join(path.resolve(),"./dist")},8.端口号port:5500,//代理//因为通信中可能要考虑向不同的服务器通信,因此在这里配置访问代理时//在路径中加入指向服务别名 http://localhost:5500/a/user/login//实际我们访问的应该是 http://localhost:4000/user/login//这里的a就是代表不同服务器的别名,访问5500端口号就会根据这个别名//指向对应的localhost:4000的地址,保留后面的/user/login路由proxy:{//设置代理服务,解决跨域问题"/a":{target:"http://localhost:4000",//把/a清除掉pathRewrite:{"/a":""}}}}
}

3.3 配置script中的命令

"scripts": {1.用于执行webpack打包项目"build": "npx webpack",2.webpack4中使用用于开启webpack静态服务"dev": "npx webpack-dev-server"3.webpack5中使用用于开启静态服务,并且提供静态路径"dev": "webpack serve --static"}

3.4  网页中的静态路径配置

publicimgcss
srcviewsapp.js

4. webpack5 配置实践

4.1 配置package.json

1.正在项目目录下执行npm init -y 初始化文件。

2.编写package.json,配置依赖。

{"name": "0920","version": "1.0.0","description": "","main": "index.js","type": "module",2.配置启动命令"scripts": {"start": "cross-env mode=development webpack serve --static","dev": "cross-env mode=development webpack","des": "cross-env mode=production webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {5. 配置clean-webpack-plugin,用于在每次构建前清理/删除输出目录的 Webpack 插件,确保输出目录只包含当前构建生成的文件,避免旧文件残留。"clean-webpack-plugin": "^4.0.0","cross-env": "^7.0.3",7,配置解析css插件"css-loader": "^7.1.2",3. 配置html-webpack-plugin,是 Webpack 的一个核心插件,用于简化 HTML 文件的创建"html-webpack-plugin": "^5.6.0",6,配置解析style插件"style-loader": "^4.0.0","stylus": "^0.63.0","stylus-loader": "^8.1.1",1.配置webpack的依赖"webpack": "^5.94.0","webpack-cli": "^5.1.4",4,配置webpack-dev-server 是 Webpack 官方提供的开发服务器工具,它为前端开发提供了实时重新加载(live reloading)和模块热替换(HMR)等功能,极大提高了开发效率。"webpack-dev-server": "^5.1.0"},"dependencies": {"axios": "^1.7.7"}
}

执行npm i 下载依赖。

4.2  准备内容

3. 在项目目录下新建src和public文件夹。在src文件夹下新建一个index.js文件、一个components文件夹和stylus文件夹。在components文件夹下新建一个Box.js文件和Ball.js文件。

4. 编写Box.js文件和和Ball.js文件。

Box.js文件:
export default class Box{constructor(){}play(){console.log("play");}
}
Ball.js文件:
import Box from "./Box.js";export default class Ball extends Box{constructor(){super()}run(){console.log("run");}
}

5. 编写index.js文件

import Ball from "./components/Ball.js";
import axios from "axios";
import "./stylus/main.styl";
var b=new Ball();
b.play();
b.run();
console.log("c");axios.get("http://localhost:5200/a/users").then((result)=>{console.log(result);
})

7. 在stylus文件夹下新建main.styl文件

w=150px;
set-block(w=50px,h=50px,c=red){width w;height: h;background-color: c;
}
.div1set-block(w,w)

8. 在public文件夹中新建一个css文件夹和html文件夹。在css文件夹新建一个a.css。在html文件夹新建一个indx.html文件。

a.css:div{color:white;
}
index.html:<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="/css/a.css">
</head>
<body><div class="div1">页面</div>
</body>
</html>

4.3 配置webpack.config.js 

9. 在根目录下新建一个webpack.config.js的文件。

import path from "path";
4.引入html-webpack-plugin,用于简化 HTML 文件的创建
import HTMLWebpackPlugin from "html-webpack-plugin";
6.引入clean-webpack-plugin,用于每次构建前清理/删除上一次自动生成的文件。
import { CleanWebpackPlugin } from "clean-webpack-plugin";
export default {3. 配置是运行环境,否压缩内容,process是没有压缩的,development是压缩的,两种都配置需要在package.json文件中配置“script”mode: process.env.mode,8.定位文件中报错代码的位置,会在dist/js文件下生成一个.map的文件。devtool: "source-map",1.配置入口文件entry: {入口文件的key:入口文件路劲"./js/main": "./src/index.js"},2.将入口文件中的所有内容打包在根路径的dist文件路劲下,并取名为min.jsoutput: {path: path.join(path.resolve(), "./dist"),[name]:表示入口文件的key。[hash:6]:表示生成随机的6位哈希码。min:表示压缩filename: "[name]-[hash:6].min.js"}, 这样配置生成的文件应该在dist/js/main-6ba25a.main.js。6ba25a就是随机生成的6位哈希码,这样就保证了每次生成的文件名不一样。5.使用html-webpack-pluginplugins: [new HTMLWebpackPlugin({5.1 配置使用模板的路劲template: path.join(path.resolve(), "./public/html/index.html"),5.2 将刚才生成好的min.js注入到index.htmlinject: true}),7.使用clean-webpack-plugin自动清除new CleanWebpackPlugin()],8. 使用解析styl插件module: {rules: [{ test: /\.styl$/, use: ["style-loader", "css-loader", "stylus-loader"] }]},6. 使用的配置webpack-dev-server devServer: {端口号port: 5200,static: {配置静态资源目录的路劲directory: path.join(path.resolve(), "./public"),静态资源生成的位置publicPath: path.join(path.resolve(), "./dist")},配置代理proxy: [{   // 匹配需要代理的请求路径(所有以/a开头的请求)context: ['/a'],// 目标服务器地址(后端API地址)target: 'http://124.70.31.133:4000',// 路径重写规则:将请求路径中的/a替换为空字符串 pathRewrite: { '^/a': '' },}]}
}

4.4 配置scripts

10.在package.json中配置多个运行环境

{...."scripts": {"start": "cross-env mode=development webpack serve --static","dev": "cross-env mode=development webpack","des": "cross-env mode=production webpack"},
....
}

启动项目是会根据启动的命令进行执行不同的启动环境

例如:

npm run stsrt 启动的就是   "start": "cross-env mode=development webpack serve --static"。

npm run dev 启动的就是   "dev": "cross-env mode=development webpack"。

npm run des 启动的就是   "des": "cross-env mode=production webpack"。

11. 执行npm run dev 就在生成了dist文件夹。

12. 运行npm run start 。

13. 访问地址:

 

http://www.xdnf.cn/news/637813.html

相关文章:

  • 智能办公系统 — 审批管理模块 · 开发日志
  • Llama 4中文调优全流程解
  • Linux Kernel调试:强大的printk(三)
  • Kotlin Native与C/C++高效互操作:技术原理与性能优化指南
  • 论文审稿之我对SCI写作的思考
  • 聊一聊接口测试如何设计有效的错误响应测试用例
  • Multivalued Dependencies
  • CMake指令:find_package()
  • 【HarmonyOS5】DevEco Studio 使用指南:代码阅读与编辑功能详解
  • Java 接口
  • Flink 常用算子详解与最佳实践
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用图像类)
  • 运维Linux之Ansible详解学习(更新中)
  • 【linux篇】系统世界跳跃的音符:指令
  • SheetMetal_Unfold方法 FreeCAD_SheetMetal deepwiki 源码笔记
  • 【时时三省】Python 语言----牛客网刷题笔记
  • 【电路笔记】-音频变压器(Audio Transformer)
  • RAG系统构建之嵌入模型性能优化完整指南
  • 永磁同步电机控制算法--IP调节器
  • 前端面试热门知识点总结
  • MongoDB分布式架构详解:复制与分片的高可用与扩展之道
  • 【Vue3】(二)vue3语法详解:自定义泛型、生命周期、Hooks、路由
  • C51单片机学习笔记——矩阵按键
  • 【硬件测试】基于FPGA的BPSK+卷积编码Viterbi译码系统开发,包含帧同步,信道,误码统计,可设置SNR
  • 平流层通信系统的深度论述:其技术成熟将推动通信范式从“地面-卫星”二元架构向“地-空-天”三维融合跃迁
  • Linux初始-历史(1)
  • Java并发编程:全面解析锁策略、CAS与synchronized优化机制
  • 关于 Web 安全:5. 认证绕过与权限控制分析
  • L1-110 这不是字符串题 - java
  • Magic Resume:开源免费的AI简历制作应用(使用指南、场景分析)