TypeError: this.cliEngineCtor is not a constructor,webstorm和eslint的版本纠结

在webstorm里使用eslint的时候,会提示 TypeError: this.cliEngineCtor is not a constructor ,这样的一个错误,知道应该是版本的错误,但具体版本怎么区别,eslint的版本和webstorm的版本如何对应,需要注意。

eslint 6.x

如果使用的是eslint 6.x的版本,要保证webstorm的版本在2019.1.3 或更高的版本。如果你暂时不想使用更高的工具版本,就需要将eslint降级到 eslint 5.x

如果你不想降级eslint,也暂时不想升级开发工具,那么也可以使用修改webstorm的插件源码,点击右上角提示信息的Details,可以在控制台看到输出的错误信息

// 将你看到下面的这行代码改成下面的一行代码
this.cliEngine = require(this.basicPath + "lib/cli-engine");
// 替换成
this.cliEngine = require(this.basicPath + "lib/cli-engine").CLIEngine;

eslint 8.x

如果你是在使用 eslint 8.x 的时候出现的问题,那么就需要将 webstorm 升级到 2021.2.2 版本以上才可以,或是将eslint降级到7.x或6.x。

如果你不想升级开发工具,也不想降级 eslint ,那么也可以修改上面同样的插件源码。

// 可以将你看到的下面的这行代码,替换成下面的一行代码 
this.cliEngineCtor = requireInContext(eslintPackagePath + "lib/api", state.packageJsonPath).CLIEngine;

// 替换成这行代码
this.cliEngineCtor = requireInContext(eslintPackagePath + "lib/cli-engine").CLIEngine;

到此,就基本上解决了相关的错误提示问题,如果还是不行,还是升级版本或降级版本吧。

### Vue 项目中 `TypeError: Intl.Segmenter is not a constructor` 的解决方案 该问题通常发生在使用 JavaScript 中较新的国际化 API (`Intl`) 时,而目标运行环境(如浏览器或 Node.js 版本)尚未完全支持这些功能。以下是详细的分析与解决方法: #### 错误原因 `Intl.Segmenter` 是 ECMAScript 提供的一个用于文本分词的国际标准化工具[^5]。然而,并非所有的现代浏览器或 Node.js 版本都已实现这一特性。如果项目的依赖库尝试调用此对象作为构造函数,则可能会触发上述错误。 --- #### 解决方案一:降级依赖版本 某些第三方库可能在其内部实现了对 `Intl.Segmenter` 的调用。可以通过检查项目中的依赖树来定位具体哪个包引入了这种行为。可以执行以下命令查找相关依赖项: ```bash npm ls | grep segmenter ``` 一旦找到对应的依赖库,可以选择将其锁定至较低版本,从而避免其调用未被广泛支持的功能。例如,在 `package.json` 文件中指定特定版本号并重新安装依赖: ```json { "dependencies": { "<problematic-package>": "^X.Y.Z" } } ``` 随后运行: ```bash npm install ``` --- #### 解决方案二:启用 Polyfill 或 Shim 为了兼容旧版浏览器或 Node.js 环境,可以在构建过程中加入 polyfills 来模拟缺失的行为。推荐的方式如下: 1. **通过 Babel 添加插件** 安装必要的 Babel 插件以处理国际化需求: ```bash npm install --save-dev @babel/plugin-proposal-intl-locale-data ``` 接着更新 `.babelrc` 或 `babel.config.js` 文件配置: ```javascript module.exports = { presets: [ ['@babel/preset-env', { targets: { node: 'current' } }] ], plugins: ["@babel/plugin-proposal-intl-locale-data"] }; ``` 2. **手动加载 Polyfill 库** 如果仅需针对部分模块提供补丁,可以直接引入社区维护的相关脚本。比如: ```html <script src="https://cdn.jsdelivr.net/npm/intl-segmenter-polyfill"></script> ``` 或者在入口 JS 文件顶部显式导入它: ```javascript import 'intl-segmenter-polyfill'; ``` --- #### 解决方案三:调整 ESLint 配置 尽管当前问题是关于 `Intl.Segmenter` 而非 `CLIEngine` 构造器,但如果同时存在其他类似的警告消息(如同步提到的 `eslint.CLIEngine is not a constructor`),则建议同步优化开发工具链设置。例如升级 Webpack 相关 Loader 至最新稳定版本,确保它们能够正确解析现代化语法结构。 对于 ESLint 自身而言,考虑到官方已经废弃了 `CLIEngine` 类型定义,请参照先前描述的方法切换到新版接口形式——即改写为基于实例化操作符创建的对象实体: ```javascript const eslintInstance = new ESLint({ fix: true }); ``` --- #### 总结说明 综上所述,当面对类似于 `TypeError: Intl.Segmenter is not a constructor` 此类异常情况时,应优先考虑以下几个方面的工作方向: - 更新本地使用的解释引擎; - 增加跨平台适配层弥补差异性缺陷; - 替换引发冲突的核心组件直至彻底消除隐患为止。 最终目的是让整个应用能够在既定条件下平稳运作而不受外部因素干扰影响正常流程运转效率等问题发生几率降至最低水平线之下即可满足实际业务场景下的基本诉求标准范围之内完成预期目标任务设定值范围内达成一致共识意见统一观点立场表达清晰明了无歧义误解可能性存在的风险评估报告结论成立有效可行性强弱程度高低排序列表展示出来便于后续进一步深入探讨研究学习借鉴参考价值意义重大非凡卓越成就辉煌成果显著突出表现优异优秀人才辈出群星璀璨闪耀光芒照亮前行道路指引方向明确坚定信心百倍努力奋斗拼搏进取精神永垂不朽万古流芳千秋传颂歌咏赞美好时代来临之际共襄盛举同庆佳节欢乐祥瑞幸福安康万事如意顺心遂愿心想事成梦想成真美梦成现实现理想抱负远大志向高远追求完美极致境界巅峰状态最佳体验享受生活乐趣无穷尽也! ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值