我的Typescript在控制台中显示错误:
TypeScript [警告]转换为CommonJS,考虑设置模块:" system"在typescriptOptions中直接转换为System.register格式
好的,但是我安装了SystemJS,它应该可以工作!
的package.json:
"systemjs": "^0.20.13"
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2017", "dom"],
"noImplicitAny": true,
"removeComments": true,
"sourceMap": true,
"suppressImplicitAnyIndexErrors": true
},
"exclude": [
"node_modules/*",
"**/*-aot.ts"
]
}
的index.html:
<!DOCTYPE html>
<html>
<head>
<base href="./" />
<title>test</title>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="systemjs.config.js"></script>
<script>
System.import('app').catch(function (err) {
console.error(err);
});
</script>
</head>
<body>
<app>Loading...</app>
</body>
</html>
怪物,SystemJS! IDK你怎么管理这个意大利面? See the code here
因此。问题是:为什么Typescript说:
在调试Web应用程序时,在浏览器控制台中TypeScript [警告]转换为CommonJS,考虑设置模块:&#34; system&#34;在typescriptOptions中直接转换为System.register格式
?
答案 0 :(得分:0)
我的systemjs.config.js
文件,我假设,是您的pastebin中包含的内容。
这会将systemjs配置为使用该文件中的嵌入式配置在浏览器中动态传输您的打字稿。
这很可能不是你想要的。相反,您应该在命令行上调用typescript。请勿在{{1}}中添加systemjs.config.js
,并确保已编译的index.html
文件在app.js
尝试从中获取的位置可用 - 或直接将其包含在systemjs
中{1}}标记。
答案 1 :(得分:0)
您收到该警告是因为您已将SystemJS设置为通过SystemJS加载的任何打字稿代码进行转换,并且您已配置执行转换的插件以生成commonjs
格式的模块。
您在问题中显示tsconfig.json
但该插件不会使用该文件。插件使用的是SystemJS配置的以下部分, 你设置了"module": "commonjs"
:
typescriptOptions: {
// Complete copy of compiler options in standard tsconfig.json
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2015", "dom"],
"module": "commonjs",
"moduleResolution": "node",
"noImplicitAny": true,
"sourceMap": true,
"suppressImplicitAnyIndexErrors": true,
"target": "es5"
},
您可以在用于转换here的插件的源代码中找到生成警告的代码:
if ((options.module != ts.ModuleKind.System) && (options.module != ts.ModuleKind.ES2015)) {
logger.warn(`transpiling to ${ts.ModuleKind[options.module]}, consider setting module: "system" in typescriptOptions to transpile directly to System.register format`)
}
首先请注意,这仅仅是一个警告。您可以继续使用TypeScript发出CommonJS模块。你得到警告的原因是,假设插件是针对SystemJS的,那么你强行要在SystemJS中加载模块,大概你应该只使用SystemJS的本机模块格式而不是生成CommonJS模块。 SystemJS 可以加载CommonJS模块,但为什么在使用本机格式时可以使用该格式?而一般来说,有理由让TypeScript编译器生成除本机SystemJS格式之外的其他格式,在此特定上下文中没有明确的理由这样做。这就是你收到警告的原因。