云引擎 Node.js 运行环境
这篇文档是针对 Node.js 运行环境的深入介绍,如希望快速地开始使用云引擎,请查看 快速开始部署云引擎应用。
所有 Node.js 项目都必须在根目录包含一个 package.json 和启动脚本(如没有在控制台或 leanengine.yaml 内指定,请确保 package.json 内的 scripts.start 存在)才会被云引擎正确识别,云引擎也会从中读取项目对于环境的需求:
{
"name": "node-js-getting-started",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js -- "
},
"dependencies": {
"leancloud-storage": "^3.11.0",
"leanengine": "^3.3.2"
},
"devDependencies": {
"nodemon": "^1.18.7"
},
"engines": {
"node": "16.x"
}
}
如果你希望创建一个新的项目,推荐从我们的 Node.js 示例项目 开始。
启动命令
云引擎默认使用 npm start 来启动项目,你可以在 package.json 中修改 scripts.start 来使用不同的程序入口或向 node 添加额外的参数。
{
"scripts": {
"start": "node server.js"
}
}
在使用 命令行工具 本地调试时,lean up 会优先使用 npm run dev 来启动项目。
配置 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": "[email protected]"
}
此时云引擎会自动 调用 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"
}
}
在安装依赖的过程中,云引擎会正常触发 NPM 的生命周期脚本(Life Cycle Scripts),如 postinstall、prepare 等。
因为云引擎会在云端安装依赖,所以命令行工具默认也不会上传 node_modules 目录;如果使用 Git 部署,也建议将 node_modules 目录添加到 .gitignore 中,使其不加入版本控制。
云引擎会上传 .yarn 文件夹,所以如果启用了 Yarn 2+ 的 PnP(Plug'n'Play)但不想使用 Zero-installs,请将 .yarn/cache 加入到 .gitignore 和 .leanignore 中
自定义构建过程
除了默认的构建过程和运行命令外,开发者还可以在 leanengine.yaml 中进一步地调整运行命令(run)、依赖安装命令(install)和构建命令(build),覆盖默认的行为:
run: echo 'run another command'
install:
- {use: 'default'}
- echo 'install additional dependencies here'
build:
- echo 'overwrite default build command here'
详细的说明见 Reference: leanengine.yaml
,下面是一些具体的例子:为子项目安装依赖
install:
- use: default
- require:
- ./frontend/package.json
- ./frontend/package-lock.json
- cd frontend && npm ci
build:
- npm run build
- cd frontend && run build
这里我们在保留默认行为的同时,额外为 frontend 目录下的项目安装了依赖、运行了构建命令。