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

ES模块环境下gulp引入gulp-sass后yargs.argv.prod报错如何解决

问题原因
  1. 第一个require is not defined报错:因为你的项目package.json中配置了"type": "module",Node.js会将所有.js后缀文件识别为ES模块,ES模块标准下不支持CommonJS的require引入语法,因此原生require方法不存在。
  2. 第二个Cannot read property 'prod' of undefined报错:你调整sass引入为ES模块写法后,yargs的API调用方式不符合ES模块和新版yargs的规范。yargs v16及以上版本在ES模块环境下,不再支持直接通过yargs.argv获取命令行参数,此时yargs.argv返回undefined,读取其prod属性就会触发该报错。
解决方案

提供两种可任选的修复方案:

方案1:保留ES模块规范,修改对应代码

  • 首先安装最新版yargs:
npm install yargs@latest --save-dev
  • 替换所有依赖引入为ES模块写法,核心代码调整如下:
// 引入gulp-sass和sass
import gulpSass from 'gulp-sass';
import dartSass from 'sass';
const sass = gulpSass(dartSass);

// 引入yargs并获取参数
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
const argv = yargs(hideBin(process.argv)).parse();
const PRODUCTION = argv.prod;
  • 项目中其他的require引入也全部替换为对应的import写法即可。

方案2:退回CommonJS规范,无需修改业务代码

直接将你的gulp配置文件从gulpfile.js重命名为gulpfile.cjs,Node.js会自动将.cjs后缀文件识别为CommonJS模块,你原来所有的require写法、yargs.argv.prod逻辑都可以正常使用,不需要调整代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:51:04