将编译器选项的ethermodule
或target
属性设置为esnext(id喜欢使用import("example")
语句)时,es6 import语句对npm install
ed库停止工作(本地模块仍然有效:例如"./test.ts"
)。
所以这import * as asd from "testmodule";
引发了cannot find module 'testmodule'
。但是,忽略这两个属性会使它起作用。为什么会这样?我应该使用什么标准来保留import("example")
和import * as asd from "testmodule";
声明?
这是我完整的tsconfig.json:
{
"compilerOptions": {
"outDir": "./dist/",
"module": "esnext",
"target": "esnext",
"allowJs": true,
"sourceMap": true
}
}
当"module"
从任何一边"commonjs"
,你需要一个specifiy"moduleResolution"
价值"node"
。指定"commonjs"
隐式设置。
另外,尽管有某些选项的名称,"target"
并且"module"
是独立且正交的。它们的含义截然不同,切勿混淆。
{
"compilerOptions": {
"outDir": "./dist/",
"module": "esnext",
"moduleResolution": "node",
"target": "esnext", // this isn't relevant
"allowJs": true,
"sourceMap": true
}
}
注意:"commonjs"
是目标格式。esnext导入语句像其他导入形式一样被转换为目标模块格式。如果指定--module esnext
,则根本不会转译它们。关键是--module
它指定了输出模块格式,而不是源模块格式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句