通过本章节来了解如何快速上手并使用 Rspack。
你可以直接使用 Rspack CLI 来创建一个基础项目,调用以下命令即可:
npm create rspack@latest
然后按照提示操作即可。
社区中已经有一些基于 Rspack 的工具链:
Modern.js 是字节跳动 Web 工程体系的开源版本,它提供了一个基于 Rspack 实现的渐进式 React 框架,并为开发 Web 应用提供了完整的解决方案。框架支持嵌套路由、服务器端渲染(SSR),并提供开箱即用的 CSS 解决方案,比如 styled-components 和 Tailwind CSS。
请阅读 官方文档 来了解更多关于 Modern.js 的信息。
Rspress 是一个基于 Rspack 的静态站点生成器,它包含如下的特性:
你可以去 官网 了解更多关于 Rspress 的信息。
Nx 是一个快速、可扩展的构建系统,Rspack 团队与 Nx 团队合作提供了 Rspack Nx 插件。该插件会给你一个预设项目,将 Rspack 与 React、TypeScript、ESLint、Jest 和用于 e2e 测试的 Cypress 整合在一起,使你能迅速搭建一个用于生产环境的应用。
运行以下命令,用 React 和 Rspack 建立一个新的 Nx workspace。
npx create-nx-workspace myrspackapp --preset=@nx/rspack
这个预设项目已经包含了 Rspack、TypeScript、TSX 和 React。此外,它还配备了用于测试的 Jest 和 Cypress 、用于代码规范校验的 ESLint。
创建成功后,你可以直接用 npm start
来启动开发服务器。你也可以运行 npm run build
来为生产环境构建应用程序、运行 npm run test
来运行单元测试。
你可以在 https://nx.dev 了解更多关于 Nx 的信息。
首先我们创建一个目录,初始化 npm ,然后在本地安装 @rspack/cli,通过如下方式进行安装:
mkdir rspack-demo
cd rspack-demo
npm init -y
npm install -D @rspack/cli
首先创建一个入口文件 src/index.js
和 一个 src/answer.js
import { answer } from './answer';
function render() {
document.getElementById(
'root'
).innerHTML = `the answer to the universe is ${answer}`;
}
render();
export const answer = 42;
Rspack 默认通过 rspack.config.js
来配置打包行为,我们可以在项目根目录下创建一个 rspack.config.js
文件,然后在里面配置打包行为,如下:
const path = require('path');
module.exports = {
entry: {
main: './src/index.js',
},
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
};
我们通过 npx rspack build
执行构建,你也可以通过 npx rspack build -c <your-config-file>
来自定义配置文件名。build 的输出结果如下:
npx rspack build
Time: 21.388ms
@rspack/cli
默认的 stats 只输出 errors、warnings 和 timings 的信息,可以通过 stats
设置输出更多构建信息。
此时我们在 dist
目录里生成了 main.js
和 main.js.map
两个文件, 我们在 dist
里创建如下的 dist/index.html
来验证生成的产物运行是否正常。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>hello rspack</title>
</head>
<body>
<div id="root"></div>
<script src="./main.js"></script>
</body>
</html>
在浏览器里打开 dist/index.html
,我们发现浏览器里正常渲染了 the answer to the universe is 42
。
Rspack 不仅可以打包本地依赖,也可以打包三方依赖,我们现在用 React 来重构我们的应用,首先添加 react
作为依赖:
npm install --save react@18 react-dom@18
将 src/index.js
重命名为 src/index.jsx
并使用 React
重构代码:
import { answer } from './answer';
import React from 'react';
import ReactDOM from 'react-dom/client';
const App = () => {
return <div>the answer to the universe is {answer}</div>;
};
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Rspack 内置了对 React 的支持,你无需任何配置,但是别忘了将 rspack.config.js
里的入口改为 src/index.jsx
。
const path = require('path');
module.exports = {
entry: {
main: './src/index.jsx',
},
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist'),
},
};
Rspack 内置了对 html 的支持,无需自己手动的在 html 里配置产物 js 的地址,通过如下方式使用 html 功能:
module.exports = {
entry: {
main: './src/index.jsx',
},
builtins: {
html: [{ template: './src/index.html' }],
},
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>hello rspack</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
此时我们执行 npx rspack build
,我们发现 dist/index.html
里自动带上了 js 的地址:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="root"></div>
<script src="/main.js" defer></script>
</body>
</html>
Rspack 内置了对 HMR 的支持,并对 React 项目内置了 fast-refresh 的支持,你无需配置,通过 npx rspack serve
即可体验 React 的 HMR,
我们修改 src/answer.js
export const answer = 'Rspack';
我们发现浏览器上的内容自动更新为 the answer to the universe is Rspack
。