云引擎 Web 前端运行环境
云引擎同样对托管 Web 前端应用(例如一个网站)提供了支持,对于使用了 React、Vue 等框架的应用,云引擎可 以在线上完成构建的过程,开发者不需要将构建产物提交进 Git 仓库也不需要额外的 CI 环境。云引擎还提供了自定义域名绑定、自动申请 SSL 证书、重定向到 HTTPS 等常用的功能,减轻前端开发者在部署和运维环节的工作量。
这篇文档是针对 Web 前端运行环境的介绍,如需了解云引擎平台提供的功能,请看 云引擎平台功能。
如果项目根目录包含一个 static.json 或 index.html,云引擎就会将其识别为 Web 前端项目,使用 Node.js 运行环境进行构建,然后自动使用 serve 来启动一个 HTTP 服务器。
快速开始
大多前端脚手架都可以通过简单地配置运行在云引擎上,推荐使用它们来创建新的项目。
- React
- Vue
- Next.js
create-react-app 提供了开箱即用的 React 工具链,会自动配置好 React 的构建工具链,让开发者能专注在核心功能上:
npx create-react-app react-for-engine --use-npm
然后切换到项目目录(上面的例子中是 react-for-engine)创建一个配置文件 static.json 将不存在的 URL 都重写到 index.html,以便我们的单页应用可以使用自己的前端路由(如 react-router):
{
"public": "build",
"rewrites": [{ "source": "**", "destination": "/index.html" }]
}
再创建一个 leanengine.yaml 来配置构建命令:
build: npm run build
可以使用官方的 Vue CLI:
npm install -g @vue/cli
vue create vue-for-engine
然后切换到项目目录(上面的例子中是 vue-for-engine)创建一个配置文件 static.json 将不存在的 URL 都重写到 index.html,以便我们的单页应用可以使用自己的前端路由(如 vue-router):
{
"public": "dist",
"rewrites": [{ "source": "**", "destination": "/index.html" }]
}
再创建一个 leanengine.yaml 来配置构建命令:
build: npm run build
可以使用官方的 create-next-app 创建项目:
npx create-next-app next-for-engine --use-npm
然后切换到项目目录(上面的例子中是 next-for-engine),创建一个 leanengine.yaml 来配置构建命令:
build: npm run build
为了能使用 Next.js 提供的 API Routes 等功能,这里实际是运行在 Node.js 运行环境(使用 npm start 启动 Next.js production server),因此下文中关于配置 serve 的部分并不适用于 Next.js。
云引擎可以在线上完成构建过程,开发者不需要将构建产物提交进 Git 仓库,也不需要额外的 CI 环境。
部署到云引擎
直接部署到生产环境:
tds deploy --prod
配置 Node.js 版本
在 package.json 的 engines.node 字段可以指定 Node.js 版本:
{
"engines": {
"node": "16.x"
}
}
你还可以设置为 * 表示总是使用最新(current)版本。
如未设置 Node.js 版本,云引擎会默认使用最新的稳定(LTS)版本。
配置包管理器
云引擎目前支持以下包管理器:
云引擎会按照以下条件使用包管理器:
| 包管理器 | 条件 | 版本 |
|---|---|---|
| pnpm | 存在合法能被解析的 pnpm-lock.yaml | |
lockfileVersion: '6.0' 或更高 | 8 | |
lockfileVersion: 5.3 或更高 | 7 | |
| 其他 | 6 | |
| Yarn 1 | 存在 yarn.lock | 1 |
| Yarn 2+ | 不默认支持,需通过 Corepack 启用 | 2+ |
| npm | 其他情况 | 使用 Node.js 默认提供的 npm |
实验性 Corepack 支持
由于 Corepack 还是实验性特性,云引擎不能保证对 Corepack 的支持是稳定的
通过给分组设置 ENABLE_EXPERIMENTAL_COREPACK 环境变量为任意非空字符串来启用实验性 Corepack 支持。
云引擎会通过调用 Corepack 读取 package.json 里的 packageManager 字段来自动识别、使用用户指定的包管理器,这也是目前唯一一种使用 Yarn 2+ 的方式。
假设有以下 package.json:
{
"name": "example",
"packageManager": "yarn@4.0.2"
}
此时云引擎会自动调用 corepack prepare --activate 并识别包管理器为 Yarn 2+。
参考:Corepack
默认命令
云引擎默认运行的脚本会随着包管理器的变化而变化,如使用了 pnpm, npm ci 会变成 pnpm install --frozen-lockfile。
云引擎只有在没有指定 installDevDependencies 为 true 且构建脚本为空(没有手动指定,package.json 里的 scripts.build 不存在)时才会省略 devDependencies 的安装。
| 阶段 | 包管理器 | 条件 | 命令 |
|---|---|---|---|
| install | npm | Node.js 10 以上且存在 package-lock.json 或 npm-shrinkwrap.json | npm ci |
npm install 或 npm install --omit=dev | |||
| pnpm | pnpm install --frozen-lockfile 或 pnpm install --frozen-lockfile --prod | ||
| Yarn 1 | yarn install 或 yarn install --production | ||
| Yarn 2+ | yarn install |
请注意 Yarn 1 只会使用 yarn.lock 内解析的 URL 下载依赖且不会遵循用户设置的源,请选择合适的源,否则可能会增加构建时间。
安装依赖(package.json)
云引擎会自动安装 package.json 中的依赖:
{
"dependencies": {
"leancloud-storage": "^3.11.0",
"leanengine": "^3.3.2"
},
"devDependencies": {
"nodemon": "^1.18.7"
}
}