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
未启用的情况下使用部署命令。
部署项目中包含的文件
默认情况下,项目的所有文件都会在部署期间复制,但可以通过以下_一种_方式修改此行为(按优先级顺序):
- 项目的
package.json
可能包含一个"files"字段,用于列出需要复制的文件和目录。 - 如果应用目录中存在
.npmignore
文件,则其中列出的文件会被忽略。 - 如果应用目录中存在
.gitignore
文件,则其中列出的文件会被忽略。