跳到主要内容
版本:Next

pnpm 部署

从工作区部署一个包。部署期间,包的文件会被复制到目标目录。部署包的所有依赖(包括工作区内的依赖)都会安装在目标目录下的独立node_modules目录中。目标目录将包含一个可移植的包,可以直接复制到服务器上执行而无需额外步骤。

备注

默认情况下,部署命令仅适用于将inject-workspace-packages设置为true的工作区。如果希望在没有"依赖注入"的情况下使用部署功能,请使用--legacy标志或将force-legacy-deploy设置为true

用法:

pnpm --filter=<部署的项目名称> deploy <目标目录>

如果在部署前需要构建项目,请同时使用--prod选项跳过devDependencies安装。

pnpm --filter=<部署的项目名称> --prod deploy <目标目录>

在Docker镜像中的用法。在单体仓库中完成构建后,在第二个使用单体仓库基础镜像作为构建上下文的镜像中或额外的构建阶段中执行以下操作:

# syntax=docker/dockerfile:1.4

FROM workspace as pruned
RUN pnpm --filter <你的包名称> --prod deploy pruned

FROM node:18-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未启用的情况下使用部署命令。

部署项目中包含的文件

默认情况下,项目的所有文件都会在部署期间复制,但可以通过以下_一种_方式修改此行为(按优先级顺序):

  1. 项目的package.json可能包含一个"files"字段,用于列出需要复制的文件和目录。
  2. 如果应用目录中存在.npmignore文件,则其中列出的文件会被忽略。
  3. 如果应用目录中存在.gitignore文件,则其中列出的文件会被忽略。