通过本章节来了解如何快速上手并使用 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。