创建Yeoman Generator时require/import导入报错求助
解决Yeoman Generator v7+ 模块加载冲突问题
问题根源
yeoman-generator 从v7版本开始改为纯ES模块发布,而你的项目默认是CommonJS模块规范(package.json未声明type: "module"),导致require()加载ES模块报错,直接用import又因未声明模块类型失败。
方案一:将项目转为ES模块
- 修改
package.json,添加"type": "module"字段:
{ "name": "generator-test", "version": "1.0.0", "type": "module", // 新增该字段 "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "yeoman-generator": "^7.1.0" } }
- 修改
index.js,将CommonJS导出改为ES模块导出:
import Generator from "yeoman-generator"; export default class extends Generator { initializing() { this.log("working!"); } };
方案二:保持CommonJS,使用动态import
如果不想修改项目模块类型,可利用CommonJS支持的动态import()(返回Promise)调整代码:
module.exports = class extends (await import("yeoman-generator")).default { initializing() { this.log("working!"); } };
验证步骤
修改完成后重新执行:
npm link yo test # 此处test对应generator名称generator-test的后缀部分
内容的提问来源于stack exchange,提问作者Luiso
相关产品推荐
相关产品推荐

