安装
在 Node.js、Deno、Bun 与 Vite + React 中搭建并验证 Effect v4 项目的完整指南。
环境要求:
- TypeScript 5.9 或更高版本。推荐使用 TypeScript 7,以获得最佳性能,并更好地兼容 Effect 的 TypeScript 工具链。
- 支持 Node.js 22.18 或更高版本,以及 Deno 和 Bun。
Effect 4 目前是候选发布版本(release candidate),以 npm 上的 rc 标签发布。不带标签安装 effect 包会得到最新的稳定版本,也就是版本 3。请使用下面命令中展示的 effect@rc 标签来安装版本 4。
手动安装
JavaScript 运行时
按照以下步骤,为 Node.js、Bun 或 Deno 创建一个新的 Effect 项目:
-
创建项目目录并进入该目录:
mkdir hello-effect cd hello-effect -
初始化 TypeScript 项目:
npmnpm init -y npm install --save-dev typescriptpnpmpnpm init pnpm add --save-dev typescriptYarnyarn init -y yarn add --dev typescriptBunbun initDenodeno init这会创建一个
package.json文件,作为 TypeScript 项目的初始配置。对于 Bun,这还会生成一个tsconfig.json文件;对于 Deno,则会生成一个deno.json文件。请确保
package.json文件中包含"type": "module"字段,这样 Node.js 就会把你的源文件视为 ES 模块(bun init会自动添加该字段):{ "type": "module" } -
初始化 TypeScript:
npmnpx tsc --initpnpmpnpm tsc --initYarnyarn tsc --initBunbun init已经生成了tsconfig.json文件。DenoDeno 开箱即可运行 TypeScript,并且
deno init已经生成了deno.json文件,其中默认启用了strict模式,无需再做其他配置。运行该命令后,会生成一个包含 TypeScript 配置选项的
tsconfig.json文件。其中最需要关注的选项之一就是strict标志。请打开
tsconfig.json文件,确认strict选项的值已设置为true。{ "compilerOptions": { "strict": true } } -
将所需的包安装为依赖项:
npmnpm install effect@rcpnpmpnpm add effect@rcYarnyarn add effect@rcBunbun add effect@rcDenodeno add npm:effect@rc这个包将为你的 Effect 项目提供基础功能。
接下来,我们编写并运行一个简单的程序,以确保一切配置正确。
在终端中执行以下命令:
mkdir src
touch src/index.ts
打开 src/index.ts 文件并添加以下代码:
import { Effect, Console } from "effect"
const program = Console.log("Hello, World!")
const result = Effect.runSync(program) // => undefined
运行 src/index.ts 文件。Node.js 22.18 或更高版本、Bun 以及 Deno 都能直接运行 TypeScript 文件,因此无需额外的工具链:
node src/index.tsnode src/index.tsnode src/index.tsbun src/index.tsdeno run src/index.ts如果你使用的是较旧版本的 Node.js,可以改用 tsx 运行该文件:npx tsx src/index.ts。
你应该会看到打印出 "Hello, World!" 消息。这说明程序运行正常。
Vite + React
按照以下步骤,为 Vite + React 创建一个新的 Effect 项目:
-
搭建 Vite 项目,打开终端并运行以下命令:
npm# npm 6.x npm create vite@latest hello-effect --template react-ts # npm 7+, extra double-dash is needed npm create vite@latest hello-effect -- --template react-tspnpmpnpm create vite@latest hello-effect -- --template react-tsYarnyarn create vite@latest hello-effect -- --template react-tsBunbun create vite@latest hello-effect -- --template react-tsDenodeno init --npm vite@latest hello-effect -- --template react-ts该命令会创建一个使用 React 和 TypeScript 模板的新 Vite 项目。
-
进入新建的项目目录并安装所需的包:
npmcd hello-effect npm installpnpmcd hello-effect pnpm installYarncd hello-effect yarn installBuncd hello-effect bun installDenocd hello-effect deno install包安装完成后,打开
tsconfig.json文件,确保strict选项的值已设置为 true。{ "compilerOptions": { "strict": true } } -
将所需的包安装为依赖项:
npmnpm install effect@rcpnpmpnpm add effect@rcYarnyarn add effect@rcBunbun add effect@rcDenodeno add npm:effect@rc这个包将为你的 Effect 项目提供基础功能。
现在,我们编写并运行一个简单的程序,以确保一切配置正确。
打开 src/App.tsx 文件,并将其内容替换为以下代码:
+import { useState, useMemo, useCallback } from "react"
import reactLogo from "./assets/react.svg"
import viteLogo from "/vite.svg"
import "./App.css"
+import { Effect } from "effect"
function App() {
const [count, setCount] = useState(0)
+ const task = useMemo(
+ () => Effect.sync(() => setCount((current) => current + 1)),
+ [setCount]
+ )
+
+ const increment = useCallback(() => Effect.runSync(task), [task])
return (
<>
<div>
<a href="https://vitejs.dev" target="_blank">
<img src={viteLogo} className="logo" alt="Vite logo" />
</a>
<a href="https://react.dev" target="_blank">
<img src={reactLogo} className="logo react" alt="React logo" />
</a>
</div>
<h1>Vite + React</h1>
<div className="card">
+ <button onClick={increment}>count is {count}</button>
<p>
Edit <code>src/App.tsx</code> and save to test HMR
</p>
</div>
<p className="read-the-docs">
Click on the Vite and React logos to learn more
</p>
</>
)
}
export default App
完成这些修改后,运行以下命令启动开发服务器:
npm run devpnpm run devyarn run devbun run devdeno run dev然后按 o 键在浏览器中打开应用。
点击按钮后,你应该会看到计数器递增。这说明程序运行正常。