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

GitLab构建失败:使用EJS的<%-标签时提示找不到underscore依赖

问题解决:EJS改用<%-标签后GitLab CI构建缺失underscore模块

问题背景

把EJS模板里的<%=标签换成<%-后,本地执行cross-env NODE_ENV=production webpack构建正常,但GitLab CI环境下构建失败,报错信息如下:

ERROR in ./views/forms/survey.ejs
Module not found: Error: Can't resolve 'underscore' in '/builds/ve/vsplatform/vsmanager/views/forms'
@ ./views/forms/survey.ejs 1:0-21
@ ./controllers/forms/surveyForm_controller.js
@ ./initialization.js
@ ./vsmanager.js
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! VSHOW_HTML_PLATFORM@1.0.0 build:prod: cross-env NODE_ENV=production webpack
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the VSHOW_HTML_PLATFORM@1.0.0 build:prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2022-08-25T16_22_43_830Z-debug.log

原因分析

EJS的<%-标签用于输出未转义的HTML内容,你使用的webpack EJS loader(比如ejs-loader)在处理该标签时,会默认依赖underscore库提供模板渲染的辅助方法。本地环境可能因为缓存、间接依赖已经安装过underscore,所以没触发报错;但CI环境是全新安装依赖,缺失该库就导致构建失败。

解决方案

方案1:显式安装underscore依赖

直接把underscore添加到生产依赖,确保CI环境能安装到该库:

npm install underscore --save

方案2:修改webpack loader配置,禁用underscore依赖

如果不需要underscore的辅助功能,可以调整EJS loader的配置,关闭自动引入underscore的逻辑。以ejs-loader为例,修改webpack配置:

module.exports = {
  module: {
    rules: [
      {
        test: /\.ejs$/,
        loader: 'ejs-loader',
        options: {
          noUnderscore: true // 禁用underscore依赖
        }
      }
    ]
  }
}

方案3:同步依赖锁定文件

确认本地的package-lock.json或yarn.lock已经提交到仓库,保证CI环境安装的依赖版本和本地完全一致,避免依赖树差异引发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:15:41