You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅在Jenkins脚本式流水线执行时触发Webpack编译错误求助

Jenkins脚本式流水线Webpack构建TypeError问题排查

问题概述

在Windows 2019服务器上搭建Jenkins脚本式流水线时,执行Webpack构建命令触发TypeError,但相同命令在Jenkins自由风格任务、代理本地执行均无异常。

错误日志

> webpack --config ./config/webpack-cli-prod.config.js
C:\myProject\node_modules\webpack\lib\javascript\JavascriptModulesPlugin.js:143
            throw new TypeError(
                  ^
  
  TypeError: The 'compilation' argument must be an instance of Compilation
      at Function.getCompilationHooks (C:\myProject\node_modules\webpack\lib\javascript\JavascriptModulesPlugin.js:143:10)
      at SourceMapDevToolModuleOptionsPlugin.apply (C:\myProject\node_modules\webpack\lib\SourceMapDevToolModuleOptionsPlugin.js:50:27)
      at C:\myProject\node_modules\webpack\lib\SourceMapDevToolPlugin.js:163:53
      at Hook.eval [as call] (eval at create (C:\myProject\node_modules\tapable\lib\HookCodeFactory.js:19:10), <anonymous>:100:1)
      at Hook.CALL_DELEGATE [as _call] (C:\myProject\node_modules\tapable\lib\Hook.js:14:14)
      at Compiler.newCompilation (C:\myProject\node_modules\webpack\lib\Compiler.js:1122:26)
      at C:\myProject\node_modules\webpack\lib\Compiler.js:1166:29
      at Hook.eval [as callAsync] (eval at create (C:\myProject\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)
      at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\myProject\node_modules\tapable\lib\Hook.js:18:14)
      at Compiler.compile (C:\myProject\node_modules\webpack\lib\Compiler.js:1161:28)

环境信息

  • 服务器:Windows 2019
  • Node.js版本:16.16.0,npm版本:8.11.0
  • Jenkins代理:通过agent.jar连接

已尝试方案

  • 升级/移除html-webpack-plugin,问题未解决
  • 更换服务器,保持代理和配置不变,问题复现
  • 确认自由风格任务以SYSTEM权限执行无异常,流水线任务权限可能存在差异

当前脚本式流水线代码

node("My-Server"){
    dir("C:\\MyProject"){
        stage('Pre-Test Build Client (Web)') {
            dir("aFolder"){
                bat 'npm run build-all-prod' // 该脚本会调用webpack构建命令
            }
        }
    }
}

解决方向

1. 强制流水线以SYSTEM权限执行

在流水线中添加环境变量指定执行用户,同时检查任务权限配置:

node("My-Server"){
    withEnv(["BUILD_USER_ID=SYSTEM"]) {
        dir("C:\\MyProject"){
            stage('Pre-Test Build Client (Web)') {
                dir("aFolder"){
                    bat 'npm run build-all-prod'
                }
            }
        }
    }
}

同时在Jenkins任务的「流水线-高级项目选项」中,确保开启允许SYSTEM用户执行的相关权限。

2. 规避路径转译问题

使用customWorkspace直接指定工作区,替代嵌套dir命令避免路径解析异常:

node("My-Server"){
    agent {
        node {
            label "My-Server"
            customWorkspace "C:\\MyProject\\aFolder"
        }
    }
    stage('Pre-Test Build Client (Web)') {
        bat 'npm run build-all-prod'
    }
}

3. 同步依赖环境

在流水线中添加依赖清理与重新安装步骤,确保环境与本地/自由风格任务一致:

node("My-Server"){
    dir("C:\\MyProject\\aFolder"){
        stage('Clean & Reinstall Dependencies') {
            bat 'npm cache clean --force'
            bat 'rmdir /s /q node_modules'
            bat 'del package-lock.json'
            bat 'npm install'
        }
        stage('Pre-Test Build Client (Web)') {
            bat 'npm run build-all-prod'
        }
    }
}

4. 锁定Webpack版本兼容性

检查项目Webpack版本与Node.js 16.16.0的兼容性,锁定Webpack及相关插件版本(例如webpack@5.74.0),避免依赖树中多版本Webpack导致的实例冲突。

内容的提问来源于stack exchange,提问作者sdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:01:07