rspack 使用构建vue3脚手架
基于 Rust 的高性能 Web 构建工具。rspack 主要适配 webpack 生态,对于绝大多数 webpack 工具库都是支持的。
- 启动速度快;增量热更新快。
- 兼容 webpack 生态;内置了 ts、jsx、css、css modules 等开箱即用。
- 生产优化,tree shaking、代码压缩。
rspack-vue3 代码仓库
基本使用
创建项目rspack-vue3
,安装@rspack/cli
$> npm init -y
$> npm install -D @rspack/cli
通过rspack.config.js
文件来配置编译打包项,在跟项目中创建文件rspack.config.js
。entry
编译入口指向src/index.js
;output
配置构建输出
const path = require("path");module.exports = {entry: {main: "./src/index.js",},output: {filename: "main.js",path: path.resolve(__dirname, "dist"),},
};
在src/index.js
文件中定义渲染函数并调用。在package.json
增加脚本执行命令"build": "rspack build"
// 渲染函数
const render = () => {document.getElementById("app").innerHTML = "hello world";
};render();
执行构建,npm run build
编译输出,可以看到dist
目录的输出。在 dist 目录中新建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></head><body><div id="app"></div></body><script src="./main.js"></script>
</html>
在浏览器中访问文件index.html
,可以看到正常展示。
在package.json
增加脚本执行命令"dev": "rspack serve"
用于开发环境。rspack 内置了对 html 的支持,就无须我们手动创建配置 index.html 了。
创建 html 模板文件public/index.html
,配置rspack.config.js
并指向 html 文件
const path = require("path");module.exports = {// ...builtins: {html: [{ template: path.resolve(__dirname, "public/index.html") }],},
};
再次执行构建,可以看到自动在 dist 目录下生成了index.html
更新
@rspack/cli
版本,修改了使用方式,查看后面的章节说明
配置对vue3
的支持
安装vue
、 vue-loader
,vue-loader 版本必须>=17.2.2
&> npm i vue vue-loader
修改配置rspack.config.js
,增加对 vue 单文件组件的解析
// plugins
const { VueLoaderPlugin } = require("vue-loader");module.exports = {//...plugins: [new VueLoaderPlugin()],module: {rules: [{test: /\.vue$/,loader: "vue-loader",options: {experimentalInlineMatchResource: true,},},],},
};
创建src/App.vue
文件,并修改src/index.js
入口文件,按照 vue 的使用方式引入组件、创建实例、挂载;
import { createApp } from "vue";import App from "./App.vue";// 创建实例
const app = createApp(App);app.mount("#app");
// 渲染函数
// const render = () => {
// document.getElementById("app").innerHTML = App;
// };// render();
配置less-loader
rspack 内置 css 模块的编译,对于 css 预处理器,只需安装后配置好。
$> npm i less-loader
修改配置,增加对 less 的解析。调整App.vue
style 样式,嵌套书写 less 样式。
module.exports = {// ...module: {rules: [// ...{test: /\.less$/,loader: "less-loader",type: "css",},],},
};
如果不希望生成 css 文件,将 css 样式内联到 js 中,可以配置css-loader\vue-style-loader
$> npm i css-loader vue-style-loader -D
修改配置,npm run build
可以看到没有额外的 css 文件生成。这里面有一个type: "javascript/auto"
配置,它的作用是标记了资源的类型,而 rspack 根据类型有内置的处理方式。
当使用了css-loader\vue-style-loader
后,就不需要原生的 css 支持,关闭配置experiments.css:false
。会发生冲突。
module.exports = {// ...module: {rules: [// ...{test: /\.less$/,use: ["vue-style-loader", "css-loader", "less-loader"],type: "javascript/auto",},],},experiments: {css: false,},
};
支持JSX
酷爱使用的 jsx 必须要配置上,由于 rspack 对预 webpack 插件的兼容,大多数 webpack 的插件可用。
安装babel-loader \ @babel/core \ @vue/babel-plugin-jsx
$> npm i babel-loader @babel/core @vue/babel-plugin-jsx -D
修改配置,添加对 jsx 文件的解析。新建文件src/views/index.jsx
创建 vue 组件,然后引入到App.vue
中使用渲染。
module.exports = {// ...module: {rules: [// ...{test: /\.jsx$/,use: [{loader: "babel-loader",options: {plugins: ["@vue/babel-plugin-jsx"],},},],},],},
};
组件文件代码可以查看仓库
其他配置项
安装其他依赖库vuex/vue-router/element-plus
$> npm i vuex vue-router element-plus dayjs axios element-plus
这些都是 vue 的配套设施,这里不再多写了,每个项目里配置都差不多。
还有代码规范、提交规范等
$> npm i husky eslint eslint-plugin-vue eslint-config-prettier @commitlint/cli @commitlint/config-conventional -D
配置好之后,就可以创建项目去开发业务系统了。😄
全量导入element-plus
样式时,编译报错
因为之前在配置.vue
文件样式时增加了配置 experiments: { css: false }
,关闭了默认的 css 样式处理,需要手动增加 rules 配置来处理
安装style-loader
,增加配置处理.css
文件的处理。
{module: {rules: [{test: /\.css$/i,use: ["style-loader", "css-loader"],},];}
}
也可以使用vue-style-loader
替代style-loader
,都是解决项目加载 css 样式的问题,style-loader
不局限 vue 项目,功能更多一点。
resolve.alias
定义路径别名
配置 rspack.config.js
,extensions
配置解析的模块。
{resolve: {alias: {"@": path.resolve(__dirname, "./src"),},extensions: [".js", ".jsx", ".vue",".mjs"],},
}
升级到了rspack@0.5
,需要单独安装@rspack/core
将之前配置的builtins.html
,调整为内置的插件进行配置
const rspack = require("@rspack/core");// ...
{// builtins: {// html: [{ template: path.resolve(__dirname, "public/index.html") }],// },plugins: [new VueLoaderPlugin(),new rspack.HtmlRspackPlugin({ template: "public/index.html" }),],
}
最近已经发布了
rspack@0.6
,更新速度还是可以的。对于 webpack 生态的兼容,很适合旧项目的迁移升级。😀
rsbuild
基于 rspack 的构建工具
官方推荐的基于 rspack 的 web 构建工具。是 webpack 迁移到 rspack 的最佳方案。
- 易于配置,提供开箱即用的构建能力。
- 集成了 Rspack,SWC 和 Lightning CSS 等高性能工具。
- 内置插件系统,可以使用现有大多数的 webpack 插件和所有的 rspack 插件
npm create rsbuild@latest
按照提示
选择了vue3\typescript
,暂时没有其他的选项
安装好依赖npm i
,启动:
安装@rsbuild/plugin-babel @rsbuild/plugin-vue-jsx
支持 vue jsx/tsx 语法
新增配置rsbuild.config.ts
import { defineConfig } from "@rsbuild/core";
import { pluginVue } from "@rsbuild/plugin-vue";
import { pluginBabel } from "@rsbuild/plugin-babel";
import { pluginVueJsx } from "@rsbuild/plugin-vue-jsx";export default defineConfig({plugins: [pluginBabel({include: /\.(?:jsx|tsx)$/,exclude: /[\\/]node_modules[\\/]/,}),pluginVueJsx(),pluginVue(),],
});
安装vue
配套设施vuex\vue-router\axios
等。完善整个脚手架。详情查看仓库https://gitee.com/ngd_b/rspack-vue3/tree/rsbuild-vue3/
npx rsbuild inspect
查看默认的配置
包含两个文件rsbuild.config.mjs\rspack.config.web
,可以通过项目下的rsbuild.config.ts
文件进行修改。
可通过--env production
选项来输出生成环境下的配置。
- 增加路径别名,引文是 ts 项目,所以优先在
tsconfig.json
中配置,也可以在rsbuild.config.ts
{"compilerOptions": {"paths": {"@/*": ["./src/*"]}}
}
- 内置了
less\sass
预处理器。 - 重新配置了 html 模板,新建
pulbic
目录,创建index.html
文件,修改配置
{html:{template:"./public/index.html"},
}
rsdoctor
构建分析工具
可以将编译行为及耗时可视化展示。只支持构建过程分析;自定义构建扫描规则。
安装:
$> npm add @rsdoctor/rspack-plugin -D
增加配置rsbuild.config.ts
import { RsdoctorRspackPlugin } from '@rsdoctor/rspack-plugin';{tools:{rspack(config, { appendPlugins }) {// 仅在 RSDOCTOR 为 true 时注册插件,因为插件会增加构建耗时if (process.env.RSDOCTOR) {appendPlugins(new RsdoctorRspackPlugin({// 插件选项}),);}},}
}
RSDOCTOR
在执行构建时,增加变量开启构建分析。RSDOCTOR=true npm run build
最近在升级旧项目,会写一篇记录文章,编译打包速度至少提升了 60% 👍 ,还在调整中。
相关文章:
rspack 使用构建vue3脚手架
基于 Rust 的高性能 Web 构建工具。rspack 主要适配 webpack 生态,对于绝大多数 webpack 工具库都是支持的。 启动速度快;增量热更新快。兼容 webpack 生态;内置了 ts、jsx、css、css modules 等开箱即用。生产优化,tree shaking…...
maven之pom中的build标签
1、build标签分类 1.1、全局配置(project build) 针对整个项目的所有情况都有效。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"htt…...
Cesium.js--》探秘Cesium背后的3D模型魔力—加载纽约模型
今天简单实现一个Cesium.js的小Demo,加强自己对Cesium知识的掌握与学习,先简单对这个开源库进行一个简单的介绍吧! Cesium 是一个开源的地理空间可视化引擎,用于创建基于 Web 的三维地球应用程序。它允许开发人员在网页上呈现高度…...
.NET i18n 多语言支持与国际化
环境 WIN10 VS2022 .NET8 1.👋创建项目 2.👀创建Resources Controllers HomeController.en.resx HomeController.fr.resx HomeController.zh.resx 3.🌱Program.cs添加国际化支持 // 添加国际化支持 builder.Services.AddLocalization(…...
基于Pytorch实现图像分类——基于jupyter
分类任务 网络基本构建与训练方法,常用函数解torch.nn.functional模块nn.Module模块 MNIST数据集下载 from pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / "mnist"PATH.mkdir(parentsTrue, exist_okTrue)U…...
如何将CSDN的文章以PDF文件形式保存到本地
1.F12 打开开发者工具窗口 2.console下输入命令 (function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce, #ad_cen, #ad_bot").remove();$(".nav_top_2011, #header, #navigator").remove…...
面试经典150题——删除有序数组中的重复项
面试经典150题 day3 题目来源我的题解方法一 双指针 题目来源 力扣每日一题;题序:26 我的题解 方法一 双指针 使用两个指针分别指向相同元素的左右边界,再利用一个count记录最终需要的数组长度。 时间复杂度:O(n) 空间复杂度&a…...
Unity3D知识点精华浓缩
一、细节 1、类与组件的关系 2、Time.deltaTime的含义 3、怎么表示一帧的移动距离 4、Update和LateUpdate的区别和适用场景 5、找游戏对象的方式(别的对象 / 当前对象的子对象) 6、组件1调用组件2中方法的方式 7、在面板中获取外部数据的方法 8、序列化属…...
HTML的文档说明
1.告诉浏览器当前网页的版本 2.写法: !以前的写法:要依据网页的HTML的版本去确定,紫萼发油很多很多。 具体的写法可以参考:W3C官网的文档说明 !新写法:W3C都推荐用h5的写法 <DOCTYPE ht…...
ubuntu 更新或更改GCC/G++
最近遇到一些问题,需要用到gcc-9/g-9,但是我自带的ubuntu18.04是gcc-7.5/g-7.5,所以升级一下,奈何文章太多而且很多无效,所以在此记录一下: 参考:https://stackoverflow.com/questions/19836858…...
Java --- Java语言基础
这个Java可是个好东西,是一门面对对象的程序设计语言,其语法很类似C,所以学过C的伙伴们就很好上手,另外Java对C进行了简化与提高,这个在后期学习会感受到,Java还有很多的类库API文档以及第三方开发包。 这…...
【C++算法竞赛 · 图论】图的存储
前言 图的存储 邻接矩阵 方法 复杂度 应用 例题 题解 邻接表 方法 复杂度 应用 前言 上一篇文章中(【C算法竞赛 图论】图论基础),介绍了图论相关的概念和一种图的存储的方法,这篇文章将会介绍剩下的两种方法ÿ…...
Spring AOP IOC
spring的优缺点 IOC集中管理对象,对象之间解耦,方便维护对象AOP在不修改原代码的情况下,实现一些拦截提供众多辅助类,方便开发方便集成各种优秀框架 紧耦合和松耦合 松耦合可以使用单一职责原则、接口分离原则、依赖倒置原则 …...
Linux ARM平台开发系列讲解(QEMU篇) 1.1 编译QEMU 构建RISC-V64架构 运行Linux kernel
1. 概述 QEMU可以模拟很多架构的CPU(ARM,RISC-V等),重点是免费,用来学Linux简直太适合不过了,所以,我打算开一章节来教QEMU的使用,这样也方便环境统一调试,本章节就讲解如何在Ubuntu搭建QEMU,我的环境是全新的Ubuntu22,QEMU下载的9.0,kernel下载的6.0. 2. 源码下载…...
Day19-【Java SE进阶】网络编程
一、网络编程 1.概述 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java.net,*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。 网络通信的…...
pyqt写个星三角降压启动方式2
星三角降压启动用可以用类进行封装,就像博图FB块那样。把逻辑都在类里完成,和外界需要交互的暴露出接口。测试过程中,发现类中直接用定时器QTimer会出现问题。然后就把定时器放到外面了。然后测试功能正常。 from PySide6.QtWidgets import …...
js可视化爬取数据生成当前热点词汇图
功能 可以爬取到很多数据,并且生成当前的热点词汇图,词越大越热门(词云图) 这里以b站某个评论区的数据为例,爬取63448条数据生成这样的图片 让我们能够更加直观的看到当前的热点 git地址 可以直接使用,中文…...
研发岗-面临统信UOS系统配置总结
第一步 获取root权限 配置环境等都需要用到root权限,所以我们先获取到root权限,方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包,解压到指定文件夹,设置链接࿰…...
【STL详解 —— list的介绍及使用】
STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭…...
cocos creator开发中遇到的问题和解决方案
前言 总结一下使用cocos开发遇到的坑,不定期更新。 问题汇总 代码修改Position坐标不生效 首先要通过打log或者断点排除下是不是逻辑上的问题,还有是不是有动画相关把位置修改了。我遇到的问题是坐标修改被widget组件覆盖了。 纹理压缩包体变大 co…...
10分钟带你学会配置DNS服务正反向解析
正向解析 服务端IP客户端IP网址192.168.160.134192.168.160.135www.openlab.com 一、首先做准备工作: 关闭安全软件,关闭防火墙,下载bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# y…...
【vim 学习系列文章 19 -- 映射快捷键调用两个函数 A 和B】
请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 映射快捷键调用两个函数 映射快捷键调用两个函数 在 Vim 中,如果想通过按下 gcm 来调用两个函数,比如 FunctionA 和 FunctionB,需要先定义这两个函数,然后创建一个映射。这个映…...
Windows安装MongoDB结合内网穿透轻松实现公网访问本地数据库
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
sgg大数据全套技术链接[plus]
写在开头:感谢尚硅谷,尚硅谷万岁,我爱尚硅谷 111个技术栈43个项目,兄弟们,冲! 最近小米又又又火了一把,致敬所有造福人民的企业和伟大的企业家,致敬雷军,小米ÿ…...
OpenHarmony南向嵌入式:【XR806开发板指导文档】
一. 简介 芯片介绍 XR806是全志科技旗下子公司广州芯之联研发设计的一款支持WiFi和BLE的高集成度无线MCU芯片,支持OpenHarmony轻量设置系统。具有集成度高、硬件设计简单、BOM成本低、安全可靠等优点。可广泛满足 智能家居、智慧楼宇、工业互联、儿童玩具、电子竞…...
Rust 实战练习 - 10. JSON、XML、YAML/TOML、Ini专题
配置文件 常见的配置文件有很多:JSON, Ini, XML, TOML, YAML … 目标: JSON/YAML/TOMLIniXML Rust中序列化用的最多的是 serde, 依赖它,有很多出色的第三方库可以使用。 其中,serde本身支持JSON/YAML/TOML/JSON5…多种&#…...
5.Hexo为页面标记标签和类别
Hexo的标签和类别基本上是可以在Hexo中将内容分组的两种方式 如果在网站上有一堆内容,有不同的博客文章 将博客文章分类为不同的类别会很有帮助 用特定的关键词为博客文章标记 如果可以同时分类和标记页面,会使网站用户更轻松地找到他们想要的页面类型 …...
·13·1dawwd
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...
Docker - PostgreSQL
博文目录 文章目录 说明命令 说明 Docker Hub PostgreSQL 数据卷数据卷印射在容器内的路径postgres/var/lib/postgresql/data |容器内的路径|说明| |–|–|–| |/var/lib/postgresql/data|数据目录| 部分环境变量是否必要说明POSTGRES_PASSWORD必需设置超级用户密码POSTGRES…...
Python | Leetcode Python题解之第26题删除有序数组中的重复项
题目: 题解: class Solution:def removeDuplicates(self, nums: List[int]) -> int:if not nums:return 0n len(nums)fast slow 1while fast < n:if nums[fast] ! nums[fast - 1]:nums[slow] nums[fast]slow 1fast 1return slow...
要维护公司的网站该怎么做/免费注册网址
2019独角兽企业重金招聘Python工程师标准>>> 今天决定看看开源中国安卓版app,并试着重构一下。好的进入主题。 创建MainActivity public class MainActivity extends ActionBarActivity implementsNavigationDrawerFragment.NavigationDrawerCallbacks,O…...
机械网站建设/花都网络推广seo公司
Exchanger类源于java.util.concurrent包,它可以在两个线程之间传输数据,Exchanger中的public V exchange(V x)方法被调用后等待另一个线程到达交换点(如果当前线程没有被中断),然后将已知的对象传给它,返回…...
机关公文写作网站/高佣金app软件推广平台
本文转自:https://blog.csdn.net/jeff06143132/article/details/25696371 连接Oracle,以Oracle用户登陆: $su - oracle$sqlplus 数据库用户/数据库密码 as sysdba输入查询: select * from dba_profiles where profileDEFAULT and resource_na…...
响应网站和模板网站有哪些/重大新闻事件2023
http://m.blog.csdn.net/blog/luoyuyou/38265817 ArrayBlockingQueue是一个基于数组和锁的有容量限制的阻塞队列,事实上它的阻塞能力来自于锁和条件队列。 我们对关键代码展开: public boolean offer(E e, long timeout, TimeUnit unit)throws Interrupt…...
淮安市哪里可以做网站/免费网站友情链接
部署prometheus监控服务器 安装监控服务器修改配置文件编写service文件,管理服务查看监控数据 所有主机系统均为CentOS7,提前配置IP、主机名、系统YUM源 安装监控软件(192.168.4.10主机操作) 安装软件 [rootprometheus ~]# tar …...
视频投票网站怎么做的/免费网页在线客服系统
1 sftp无法上传下载文件夹 只能是文件 2 sftp的文件路径无法粘贴 只能一层层找 无法接受 3 同步(快捷命令)做的太差 经常公司覆盖家里 家里覆盖公司 就不能和git一样merge吗??? 辛苦半小时从mobaxterm手抄过来的配置就那么没了 4 快捷命令有优点 但是也有缺点: 优点: 装…...