江西机场建设集团网站/百度销售

江西机场建设集团网站,百度销售,手机版网站开发的功能点,石家庄进入应急状态项目描述 本项目 webpack 的基本使用。 webpack 官方:https://webpack.docschina.org/concepts/ Element-plus 官方:https://element-plus.sxtxhy.com/zh-CN/ Vue3 官方:https://cn.vuejs.org/ 项目组成明细 每个步骤完成后重新执行 npm run …

项目描述

本项目 webpack 的基本使用。
webpack 官方:https://webpack.docschina.org/concepts/
Element-plus 官方:https://element-plus.sxtxhy.com/zh-CN/
Vue3 官方:https://cn.vuejs.org/

项目组成明细

每个步骤完成后重新执行 npm run dev 即可看到效果

1、webpack

打包工具

安装

npm install webpack --save-dev

package.json

配置 dev 命令

{"name": "test","version": "1.0.0","description": "","main": "index.js","scripts": {"dev": "npx webpack --config webpack.dev.js"},"keywords": [],"author": "","license": "ISC","devDependencies": {"webpack": "^5.98.0"}
}

入口文件 main.js

创建 src 文件夹,创建文件 main.js

const h1 = document.createElement('h1')
h1.innerHTML = '666'
document.body.appendChild(h1)console.log(h1)
console.log(process.env.NODE_ENV === 'development')

配置文件 webpack.dev.js

const path = require('path')module.exports = {mode: 'development', // 开发模式// 入口文件entry: {dev_index: './src/main.js' // 这个对象的键名会传递到下面的'[name].bundle.js'中的 name},// 输出文件output: {filename: '[name].bundle.js', // 输出文件名path: path.resolve(__dirname, 'dist') // 输出文件目录},devtool: 'inline-source-map' // 开启source-map
}

2、html-webpack-plugin

生成 html 文件

安装

npm install html-webpack-plugin --save-dev

package.json

{// ..."devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3"}
}

创建文件 index.html

src 下面创建文件 index.html

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title><%= htmlWebpackPlugin.options.title %></title></head><body><div id="app"></div></body>
</html>

webpack.dev.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...plugins: [new HtmlWebpackPlugin({title: 'template5-dev', // 生成的HTML文件标题filename: 'index.html' // 生成的HTML文件名template: './src/index.html', // 不配置此项,默认生成index.html;配置此项传递自定义HTML文件// favicon: path.join(__dirname, './src/img/favicon.ico')})]
}

3、webpack-dev-server

启动一个本地服务器,并实时更新页面

安装

npm install webpack-dev-server --save-dev

package.json

dev 命令增加 serve

{// ..."scripts": {"dev": "npx webpack serve --config webpack.dev.js"},// ..."devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3","webpack-dev-server": "^5.2.0"}
}

webpack.dev.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...devServer: {static: './dist', // 静态资源目录hot: true, // 开启模块热更新port: 8080, // 端口号open: true, // 自动打开浏览器watchFiles: ['./src/index.html'], // 监听文件变化(自动刷新页面)client: {logging: 'none' // 关闭客户端日志// logging: 'error', // 仅显示错误}}
}

4、style-loader、css-loader

处理 css 文件

安装

npm install style-loader css-loader --save-dev

package.json

{// ..."devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3","webpack-dev-server": "^5.2.0","style-loader": "^4.0.0","css-loader": "^7.1.2"}
}

main.js

src 下面创建 css 文件夹,里面创建 index.css

// ...
import './css/index.css'

webpack.dev.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...module: {rules: [{test: /\.css$/i, // 匹配css文件use: ['style-loader', 'css-loader'] // 使用loader}]}
}

5、url-loader

处理图片、字体等静态资源

安装

npm install url-loader --save-dev

package.json

{// ..."devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3","webpack-dev-server": "^5.2.0","style-loader": "^4.0.0","css-loader": "^7.1.2","url-loader": "^4.1.1"}
}

main.js

src 下面创建 img 文件夹, 添加 favicon.ico 文件

// ...
import img from './img/favicon.ico'console.log(img)
document.body.appendChild(img)

webpack.dev.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...module: {rules: [// ...{test: /\.(png|svg|jpg|jpeg|gif)$/i, // 匹配图片文件use: [{ loader: 'url-loader', options: { limit: 6000, esModule: false, name: '[name].[ext]', outputPath: 'images' } }], // 使用loadertype: 'javascript/auto' // 解决图片打包后路径问题}]}
}

6、terser-webpack-plugin

压缩代码,去掉注释与 console.log 等 [生产环境时配置]

安装

npm install terser-webpack-plugin --save-dev

package.json

增加 build 命令

{// ..."scripts": {"dev": "npx webpack serve --config webpack.dev.js","build": "npx webpack --config webpack.prod.js"},// ..."devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3","webpack-dev-server": "^5.2.0","style-loader": "^4.0.0","css-loader": "^7.1.2","url-loader": "^4.1.1","terser-webpack-plugin": "^5.3.14"}
}

创建文件 webpack.prod.js

生产环境配置文件

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')module.exports = {mode: 'production',entry: {index: './src/main.js'},output: {publicPath: './',filename: '[name].js',path: path.resolve(__dirname, 'dist'),clean: true},plugins: [new HtmlWebpackPlugin({title: 'template5',filename: 'index.html',template: './src/index.html',favicon: path.join(__dirname, './src/img/favicon.ico')})],module: {rules: [{test: /\.css$/i,use: ['style-loader', 'css-loader']},{test: /\.(png|svg|jpg|jpeg|gif)$/i,use: [{ loader: 'url-loader', options: { limit: 6000, esModule: false, name: '[name].[ext]', outputPath: 'images' } }],type: 'javascript/auto'}]},optimization: {minimizer: [new TerserPlugin({terserOptions: {compress: {drop_console: true // 移除所有 console.*},format: {comments: false // 移除所有注释}},extractComments: false // 禁止生成独立的注释文件})]}
}

7、vue-loader

处理 vue 文件

安装

npm install vue-loader --save-dev

安装 vue3

npm install vue

package.json

{// ..."dependencies": {"vue": "^3.5.13"},"devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3","webpack-dev-server": "^5.2.0","style-loader": "^4.0.0","css-loader": "^7.1.2","url-loader": "^4.1.1","terser-webpack-plugin": "^5.3.14","vue-loader": "^17.4.2"}
}

创建文件 App.vue

src 下面创建 App.vue

<template><header><h1>{{ test_name }}</h1></header><main></main><footer></footer>
</template><script setup>
import { ref } from 'vue'const test_name = ref('app.vue')
</script>

main.js

// ...
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)
app.mount('#app')

webpack.dev.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')module.exports = {// ...plugins: [// ...new VueLoaderPlugin() // 添加VueLoaderPlugin],// ...module: {rules: [// ...{test: /\.vue$/,loader: 'vue-loader'}]}
}

7.1 不使用 vue-loader 加载 vue

不使用 vue-loader 插件,也可以使用 vue 的方法
此法打包后项目大些,编译速度慢些,正常不推荐

main.js

// ...
import { createApp } from 'vue'createApp({data() {return {msg: 'Hello Vue!'}}
}).mount('#app')

index.html

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title><%= htmlWebpackPlugin.options.title %></title></head><body><div id="app">{{ msg }}</div></body>
</html>

webpack.dev.js

打包生产时也要加上此配置

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...resolve: {alias: {vue$: 'vue/dist/vue.esm-bundler.js' // 包含编译器的构建版本}}
}

8、全局加载 Element plus

全局加载打包后项目偏大,但配置简单

安装

npm install element-plus

package.json

{// ..."dependencies": {"vue": "^3.5.13","element-plus": "^2.9.6"}// ...
}

main.js

// ...
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'const app = createApp(App)app.use(ElementPlus, {locale: zhCn
})app.mount('#app')

8.1、按需加载 Element plus

按需加载打包后项目偏小,但配置复杂,并且需要安装插件

安装插件

安装旧版,因最新版默认导出 ESM 格式,不支持 CommonJS 格式

npm install unplugin-auto-import@0.16.1 unplugin-vue-components@0.25.1 --save-dev

main.js

无需配置,如之前已配置全局 Element plus,需去掉

// ...
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)
app.mount('#app')

App.vue

使用方法,并配置国际化

<template><el-config-provider :locale="zhCn"><el-button type="primary" @click="testOpen('test')">test</el-button></el-config-provider>
</template><script setup>
import { ref } from 'vue'
import { ElConfigProvider } from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'const testOpen = (name) => {ElMessage('this is a message.')
}
</script>

webpack.dev.js

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')module.exports = {// ...plugins: [// ...AutoImport({resolvers: [ElementPlusResolver()]}),Components({resolvers: [ElementPlusResolver()]})]// ...
}

9、axios

请求 axios

安装

npm install axios

package.json

{// ..."dependencies": {"vue": "^3.5.13","element-plus": "^2.9.6","axios": "^1.8.4"}// ...
}

创建 api.js

在 src 目录下创建 api.js

import axios from 'axios'const api = axios.create({baseURL: 'http://localhost:9000',timeout: 60000,headers: { ['Content-Type']: 'application/x-www-form-urlencoded' }// withCredentials: true // 跨域请求时是否需要使用凭证(携带cookie)
})// 请求拦截器
api.interceptors.request.use((req) => {return req},(err) => {return Promise.reject(err)}
)// 响应拦截器
api.interceptors.response.use((res) => {return res.data},(err) => {return Promise.reject(err)}
)const { get, post, put, delete: del } = apiexport const testGet = (params) => {return get('/tianqiApi', { params })
}

App.vue

<template><!-- // ... -->
</template><script setup>
// ...import { testGet } from './api'const testApi = async () => {try {const res = await testGet()console.log(res)} catch (error) {console.log(error)}
}testApi()
</script>

完整配置 webpack.dev.js

开发配置

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')module.exports = {mode: 'development', // 开发模式// 入口文件entry: {dev_index: './src/main.js' // 这个对象的键名会传递到下面的'[name].bundle.js'中的 name},// 输出文件output: {filename: '[name].bundle.js', // 输出文件名path: path.resolve(__dirname, 'dist') // 输出文件目录},devtool: 'inline-source-map', // 开启source-mapdevServer: {static: './dist', // 静态资源目录hot: true, // 开启模块热更新port: 8080, // 端口号open: true, // 自动打开浏览器watchFiles: ['./src/index.html'], // 监听文件变化(自动刷新页面)client: {logging: 'none' // 关闭客户端日志// logging: 'error', // 仅显示错误}},plugins: [new HtmlWebpackPlugin({title: 'template5-dev', // 生成的HTML文件标题filename: 'index.html', // 生成的HTML文件名template: './src/index.html', // 不配置此项,默认生成index.html;配置此项传递自定义HTML文件favicon: path.join(__dirname, './src/img/favicon.ico')}),new VueLoaderPlugin(), // 添加VueLoaderPluginAutoImport({resolvers: [ElementPlusResolver()]}),Components({resolvers: [ElementPlusResolver()]})],module: {rules: [{test: /\.css$/i, // 匹配css文件use: ['style-loader', 'css-loader'] // 使用loader},{test: /\.(png|svg|jpg|jpeg|gif)$/i, // 匹配图片文件use: [{ loader: 'url-loader', options: { limit: 6000, esModule: false, name: '[name].[ext]', outputPath: 'images' } }], // 使用loadertype: 'javascript/auto' // 解决图片打包后路径问题},{test: /\.vue$/,loader: 'vue-loader'}]}
}

完整配置 webpack.prod.js

生产配置

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')module.exports = {mode: 'production', // 生产模式// 入口文件entry: {index: './src/main.js' // 这个对象的键名会传递到下面的'[name].bundle.js'中的 name},// 输出文件output: {publicPath: './', // 输出文件路径前缀filename: '[name].js', // 输出文件名path: path.resolve(__dirname, 'dist'), // 输出文件目录clean: true // 每次构建前清理dist目录},plugins: [new HtmlWebpackPlugin({title: 'template5', // 生成的HTML文件标题filename: 'index.html', // 生成的HTML文件名template: './src/index.html', // 不配置此项,默认生成index.html;配置此项传递自定义HTML文件favicon: path.join(__dirname, './src/img/favicon.ico')}),new VueLoaderPlugin(), // 添加VueLoaderPluginAutoImport({resolvers: [ElementPlusResolver()]}),Components({resolvers: [ElementPlusResolver()]})],module: {rules: [{test: /\.css$/i, // 匹配css文件use: ['style-loader', 'css-loader'] // 使用loader},{test: /\.(png|svg|jpg|jpeg|gif)$/i, // 匹配图片文件use: [{ loader: 'url-loader', options: { limit: 6000, esModule: false, name: '[name].[ext]', outputPath: 'images' } }], // 使用loadertype: 'javascript/auto' // 解决图片打包后路径问题},{test: /\.vue$/,loader: 'vue-loader'}]},optimization: {minimizer: [new TerserPlugin({terserOptions: {compress: {drop_console: true // 移除所有 console.*},format: {comments: false // 移除所有注释}},extractComments: false // 禁止生成独立的注释文件})]}
}

完整配置 package.json

{"name": "template5","version": "1.0.0","description": "","main": "index.js","scripts": {"dev": "npx webpack serve --config webpack.dev.js","build": "npx webpack --config webpack.prod.js"},"keywords": [],"author": "","license": "ISC","dependencies": {"axios": "^1.8.4","element-plus": "^2.9.6","vue": "^3.5.13"},"devDependencies": {"webpack": "^5.98.0","html-webpack-plugin": "^5.6.3","webpack-dev-server": "^5.2.0","style-loader": "^4.0.0","css-loader": "^7.1.2","url-loader": "^4.1.1","vue-loader": "^17.4.2","terser-webpack-plugin": "^5.3.14","unplugin-auto-import": "^0.16.1","unplugin-vue-components": "^0.25.1"}
}

完整目录结构

src
|- img
|  |- favicon.ico
|- css
|  |- index.css
|- api.js // api文件
|- main.js // 入口文件
|- index.html // html文件
|- App.vue // vue文件
package.json
webpack.dev.js
webpack.prod.js

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32实物】基于STM32的太阳能充电宝设计

基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…

【记一次】AI微调训练步数计算方式

llama微调训练步数计算方式,以下数据为假设 一、关键参数解析 总样本数&#xff1a;Num examples 1,047 表示训练数据集包含 1,047 个样本。 训练轮数&#xff1a;Num Epochs 300 表示整个训练集将被遍历 300 次。 总批次大小&#xff1a;Total train batch size 80 表示…

python-selenium 爬虫 由易到难

本质 python第三方库 selenium 控制 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动&#xff08;不容易遇到版本或者兼容性的问题&#xff09; 驱动下载网址&#xff1a;链接: link 1、实战1 &#xff08;1&#xff09;安装 selenium 库 pip install selenium&#…

git的底层原理

git的底层原理 三段话总结git&#xff0c; 1. 工作原理&#xff1a;git管理是一个DAG有向无环图&#xff0c;HEAD指针指向branch或直接指向commit&#xff0c;branch指向commit&#xff0c;commit指向tree&#xff0c;tree指向别的tree或直接指向blob。 2. git所管理的一个目录…

神聖的綫性代數速成例題13. 非齊次方程組解的性質、非齊次方程組解的討論

綫性空間的維數&#xff1a; 若綫性空間中存在一組綫性無關的矢量&#xff0c;使得中的任意矢量 都可以由綫性表示&#xff0c;則稱為綫性空間的維數&#xff0c;記作&#xff0c;稱為的一組基。 基與座標變換&#xff1a; 設和是維綫性空間的兩組基&#xff0c;且&#xff0c;…

Kafka集成Debezium监听postgresql变更

下载postgres的插件&#xff1a;https://debezium.io/documentation/reference/2.7/install.html 2.7版本支持postgresql12数据库。 debezium-connector-postgres-2.7.4.Final-plugin.tar.gz 上传插件并解压 mkdir /usr/local/kafka/kafka_2.12-2.2.1/connector cd /usr/local…

『uniapp』简单文本复制文字 富文本内容复制文字(详细图文注释)

目录 text组件错误代码示例成功代码总结 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 text组件 官方文档可知app端用selectable可实现文本选中进而可复制,也就是说text标签内部的文本就可以复制了 https://uniapp.dclou…

算法模型从入门到起飞系列——背包问题(探索最大价值的掘金之旅)

文章目录 前言一、背包问题溯源&#xff08;动态规划&#xff09;1.1 动态规划的概念1.2 动态规划的基本步骤1.3 动态规划的实际应用 二、背包问题2.1 背包问题衍生2.2 0-1背包2.2.1 0-1背包描述2.2.2 0-1背包图解2.2.3 0-1背包代码刨析 2.3 完全背包2.3.1 完全背包描述2.3.2 完…

Python实现爬虫:天气数据抓取(+折线图)

一、基本架构 1、URL管理器&#xff1a;爬虫的调度中枢 核心职责 功能说明URL去重防止重复抓取URL优先级管理控制抓取顺序&#xff08;广度优先/深度优先&#xff09;断点续爬支持持久化存储抓取状态分布式协同多节点共享URL队列 2、网页下载器&#xff1a;数据获取的引擎 功…

LangChain 基础

一、LangChain 模块和体系 LangChain 是一个用于开发由大型语言模型&#xff08;LLMs&#xff09;驱动的应用程序的框架。 官方文档&#xff1a;https://python.langchain.com/docs/introduction/ LangChain 简化了LLM应用程序生命周期的每个阶段&#xff1a; 开发&#xf…

Parsing error: Unexpected token, expected “,“

今天在使用Trae AI 编程工具开发大文件切片上传功能&#xff0c;使用的是VUE3,TS技术栈&#xff0c;开发完成运行时&#xff0c;编译报错&#xff08;Parsing error: Unexpected token, expected ","&#xff09;&#xff0c;让AI自行修复此问题多次后还是没有解决&a…

农用车一键启动工作原理

移动管家农用车一键启动的工作原理与普通汽车类似&#xff0c;主要依赖于无线射频识别技术&#xff08;RFID&#xff09;。以下是具体的工作步骤和原理&#xff1a; 智能钥匙识别&#xff1a; 车主携带智能钥匙靠近车辆时&#xff0c;钥匙通过发射射频信号与车辆进行交互。车辆…

Cursor从小白到专家

文章目录 1&#xff1a;简单开发一个贪吃蛇游戏规则设置提示词 cursor开发小工具开发整体步骤创建.cursorrules输入提示词composer模式chat模式 执行cursor accept all发布到线上进行分享 cursor开发一个浏览器插件创建.cursorrulescursor rules范例集工具 输入提示词执行curso…

MAC+PHY 的硬件连接

文章目录 以太网的 MAC 与 PHY简介硬件拓扑CPU集成MAC与PHYCPU集成MAC&#xff0c;PHY采用独立芯片CPU不集成MAC与PHY&#xff0c;MAC与PHY采用集成芯片 在 OSI 分层中的位置MACPHYMAC 与 PHY 数据交互参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记&#xff0c;文末均…

仿函数 VS 函数指针实现回调

前提&#xff1a; 本博客对比 函数指针实现回调 和 仿函数 &#xff0c;突出仿函数的优势。 目的&#xff1a; 一个类要能够灵活的调用两个函数&#xff0c;essfc 和 greaterfc&#xff0c;分别用于比较两个整数的大小&#xff1a; ①&#xff1a;lessfc&#xff1a;判断 x …

CH32V208蓝牙内部带运放32位RISC-V工业级微控制器

开发板 CH32V208CBU6立创格式的开发板上述链接可下载&#xff0c;官方文件进行了转换&#xff0c;使用前请仔细核对。 CH32V208CBU6原理图&#xff0c;上述图片为芯片部分。已进行DRC。 CH32V208CBU6 PCB三维图&#xff0c;上述图片为芯片部分。已进行DRC。 概述 CH32V208C…

整理和总结微信小程序的高频知识点

前言 近期萌生了一些想法&#xff0c;感觉可以做一个小程序作为产出。 但小程序做得比较少&#xff0c;因此边做边复习。整理和总结了一些高频知识点和大家一起分享。 一、模板和组件 1.1模板&#xff08;Template&#xff09; 优势 简单灵活&#xff1a;模板定义和使用都较…

1996-2023年各省公路里程数据(无缺失)

1996-2023年各省公路里程数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;公路里程&#xff08;万公里&#xff09; 4、范围&#xff1a;31省 5、指标解释&#xff1a;公路里程指报告期末…

Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.7~2.9)

1. NAN 介质访问控制层&#xff08;MAC&#xff09; NAN MAC负责通过参与 NAN同步信标帧&#xff08;NAN Synchronization Beacon frame&#xff09;的传输&#xff0c;获取并维护设备所在的NAN集群的同步。作为同步功能的一部分&#xff0c;NAN MAC运行 TSF 定时器。NAN MAC还…

《Python实战进阶》No26: CI/CD 流水线:GitHub Actions 与 Jenkins 集成

No26: CI/CD 流水线&#xff1a;GitHub Actions 与 Jenkins 集成 摘要 持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;是现代软件开发中不可或缺的实践&#xff0c;能够显著提升开发效率、减少错误并加速交付流程。本文将探讨如何利用 GitHub Actio…