pnpm deploy
从工作区部署一个包。部署期间,被部署包的文件会被复制到目标目录。被部署包的所有依赖(包括来自工作区的依赖)都会安装在目标目录下隔离的 node_modules 目录中。目标目录将包含一个可移植的包,可直接复制到服务器并执行,无需额外步骤。
Usage:
pnpm --filter=<deployed project name> deploy <target directory>
如果你在部署前先构建项目,还应使用 --prod 选项以跳过 devDependencies 的安装。
pnpm --filter=<deployed project name> --prod deploy <target directory>
在 docker 镜像中的用法。在构建完 monorepo 中的所有内容后,在一个将 monorepo 基础镜像作为构建上下文的第二个镜像中,或在额外的构建阶段中执行以下操作:
# syntax=docker/dockerfile:1.4
FROM workspace as pruned
RUN pnpm --filter <your package name> --prod deploy pruned
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=pruned /app/pruned .
ENTRYPOINT ["node", "index.js"]
选项
--dev, -D
仅安装 devDependencies。
--no-optional
不安装 optionalDependencies。
--prod, -P
不安装 devDependencies 中的包。
--filter <package_selector>
--legacy
强制使用旧版部署实现。
默认情况下,pnpm deploy 会尝试为部署从共享锁文件创建一个专用锁文件。--legacy 标志会禁用此行为,并允许在未设置 inject-workspace-packages=true 的情况下使用 deploy 命令。
部署项目中包含的文件
默认情况下,部署期间会复制项目的所有文件,但可通过以下一种方式修改,这些方式按顺序解析:
- 项目的
package.json可以包含一个 "files" 字段,列出应被复制的文件和目录。 - 如果应用目录中有
.npmignore文件,则此处列出的任何文件都会被忽略。 - 如果应用目录中有
.gitignore文件,则此处列出的任何文件都会被忽略。
配置
forceLegacyDeploy
- 默认值:false
- 类型:Boolean
默认情况下,pnpm deploy 会尝试为部署从共享锁文件创建一个专用锁文件。如果将此设置设为 true,则使用旧版 deploy 行为。
本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。