跳转至内容
There is a version suitable for your browser's language settings. Would you like to go to the english language of the site?
主页文档

Node.js

H1

Milkio 可以自由切换 JavaScript 运行时,Milkio 可以运行在 Node.js 中。

Node.js 是当前使用量最多的 JavaScript 运行时,陪伴了 JavaScript 一路成长。

安装 Node.js

你可以前往 此处 安装 Node.js,或者使用 nvmnvm-windows,这样,你可以方便地切换版本。

当你安装完成后,通过运行下面命令,如果成功显示了版本号,说明你的 Node.js 已经安装成功了。

终端窗口
node --version && npm --version

使用 Node.js

Node.js 没有内置对运行 TypeScript 文件的直接支持,我们可以通过安装 vite-node 来实现这一点。

终端窗口
npm install --save-dev vite-node

编辑你的 /package.json 文件,将 scripts 部分使用 Bun 运行的命令,替换成 vite-node 的运行的命令。

/package.json
{
"scripts": {
"start": "vite-node ./run-serve.ts",
"dev": "vite-node ./run-serve.ts",
"api-test": "vite-node ./run-api-test.ts",
"command": "vite-node ./run-command.ts",
...
},
}

由于在 Node.js 中使用内置的 HTTP 服务器有些复杂,我们推荐你使用 Hattip 来简化这一过程。

终端窗口
npm install --save @hattip/adapter-node # 安装 Hattip

编辑你的 /run-serve.ts,将默认运行模式下的代码更改为使用 Hattip 来启动 HTTP 服务器。

/run-serve.ts
import { defineHttpHandler, envToNumber } from "milkio";
import { env } from "node:process";
import { milkio } from "./milkio";
import { createServer } from "@hattip/adapter-node"
async function serve() {
const httpHandler = defineHttpHandler(await milkio);
// if you are using Bun
Bun.serve({
port: envToNumber(env.PORT, 9000),
fetch(request) {
return httpHandler({ request });
},
});
// if you are using Hattip
createServer(httpHandler).listen(envToNumber(env.PORT, 9000), "localhost", () => {
console.log(`Server listening on http://localhost:${envToNumber(env.PORT, 9000)}`)
})
}
serve();

部署

我们无需安装 Rollup 或者 ESBuild 等打包工具,因为 Bun 本身就支持打包用于 Node.js 的代码,并且比 ESBuild 更快。

修改我们的 /package.json 文件,将 scripts 部分的 build 命令替换为:

终端窗口
bun build ./run-serve.ts --splitting --sourcemap=inline --outdir=./dist --target=node --format=esm --minify

当我们运行 npm run build 后,我们的代码会被打包到 dist 目录中。将目录拷贝到你的服务器上,就可以通过 Node.js 直接运行:

终端窗口
cd ./dist && node ./run-serve.js

如果无法运行,可以尝试将文件名更改为 run-serve.mjs

细节

默认情况下,Bun 会将你所有的代码打包为一个独立的 .js 文件,这会导致按需加载失效,以及使用一些第三方包时找不到方法或变量出现问题,因为执行顺序被打乱了。在打包时,我们添加了 --splitting 命令,这会使我们的文件可以做到真正的按需加载,尤其是当你的工程变得非常庞大时,这很有用。