我梦

导航

typescript修改target导致模块导入失败can't find module

编译ts代码时,发现一个包只支持es6及更高的版本,无奈修改编译选项target,从es5修改为es6,发现原来导入包的地方报错,提示not found。

tsconfig.json

{
"files": [
"src/main.ts"
],
"compilerOptions": {
"noImplicitAny": true,
"target": "es5"
}
}

改为es6后报错

解决办法

增加moduleResolution选项  值为node

增加module选项 值为CommonJS

{
"files": [
"src/main.ts"
],
"compilerOptions": {
"noImplicitAny": true,
"target": "es6",
"moduleResolution": "node",
"module": "CommonJS"
}
}

 

原因是当target为es5时,如果没有指定module选项 则默认值为commonjs

没有指定moduleResolution选项时,默认值是node

这种情况下编译出来的模块是commonjs方式的,也就是node环境下执行的代码

模块导入方式也是node方式导入的。

修改为es6时,module选项的值会默认为ES6,moduleResolution选项的值默认

为Classic,则此时导入包的方式就会找不到包,详情可以查看ts指南中模块解析

章节查看。所以需要手动指定moduleResolution选项为node,如果代码执行环境

为node还需要指定module为commonjs。

module和moduleResolution选项使用默认值时的规则:

 

会根据targe选项的值发生相应的变化。

 

 

 

 

 

 

posted on 2024-02-19 13:52  我梦  阅读(47)  评论(0编辑  收藏  举报