构建React+pnpm+Nx应用Dockerfile时nx命令报错求助
解决Docker构建Nx+pnpm应用时找不到nx模块的问题
问题原因
使用pnpm nx build命令时,pnpm会优先查找项目本地安装的Nx,而非全局Nx。尽管你已经全局安装了Nx,但项目node_modules中没有本地Nx依赖,因此抛出MODULE_NOT_FOUND错误。
解决方案
提供两种可行方案,按需选择:
方案1:直接调用全局Nx
去掉pnpm前缀,直接使用全局安装的Nx执行构建命令,修改builder阶段的RUN指令:
# Étape 2 : Build l'application avec NX FROM base AS builder # 直接调用全局nx执行构建 RUN nx build main-app --prod
方案2:在项目本地安装Nx(推荐)
全局Nx版本可能与项目依赖的Nx版本不匹配,容易引发构建兼容问题,更稳妥的方式是将Nx作为开发依赖安装到项目本地:
- 本地项目中执行(或直接修改Dockerfile的安装步骤):
pnpm add -D nx
- 修改Dockerfile的依赖安装步骤,确保本地Nx被安装(启用
--frozen-lockfile可保证依赖版本一致性):
# Installer les dépendances du projet avec pnpm RUN pnpm install --frozen-lockfile
修改后即可正常使用pnpm nx build main-app --prod命令。
修改后的完整Dockerfile示例(方案1版本)
# Étape 1 : Utiliser une image Node.js officielle FROM node:18 AS base # Définir le répertoire de travail dans le conteneur WORKDIR /app # Copier les fichiers de configuration dans le conteneur COPY .npmrc package.json pnpm-lock.yaml ./ # Installer pnpm globalement RUN npm install -g pnpm # Configure the global bin directory for pnpm RUN pnpm config set global-bin-dir /root/.local/bin # Add the global bin directory to PATH ENV PATH=/root/.local/bin:$PATH # Installez `nx` si ce n'est pas déjà fait RUN pnpm add -g nx # Check if nx is installed globally RUN if ! nx --version > /dev/null 2>&1; then echo "NX is not installed globally"; exit 1; else echo "NX version: $(nx --version)"; fi # Installer les dépendances du projet avec pnpm RUN pnpm install # --frozen-lockfile(本地安装nx后建议启用) # Copier le reste des fichiers du projet dans le conteneur COPY . . # Étape 2 : Build l'application avec NX FROM base AS builder # Construire l'application en utilisant NX RUN nx build main-app --prod # Étape 3 : Configurer l'image finale pour l'exécution FROM nginx:alpine AS final # Copier les fichiers de build de l'application vers Nginx COPY --from=builder /app/dist/apps/main-app /usr/share/nginx/html # Exposer le port 80 pour l'accès HTTP EXPOSE 4200 # Commande par défaut pour lancer Nginx CMD ["nginx", "-g", "daemon off;"]
内容的提问来源于stack exchange,提问作者medkhelifi
相关产品推荐
相关产品推荐

