Angular 为什么我会收到一条警告,说我应该将模块格式设置为";系统";?
My Typescript在控制台中显示错误:Angular 为什么我会收到一条警告,说我应该将模块格式设置为";系统";?,angular,typescript,systemjs,Angular,Typescript,Systemjs,My Typescript在控制台中显示错误: TopeScript [警告]转储到Cuffjs,考虑在Type Script中设置模块:“Stand”,以便直接转换到Stase.Relphi格式 好的,但是我已经安装了SystemJS,它应该可以工作了 package.json: “systemjs”:“^0.20.13” tsconfig.json: { "compilerOptions": { "target": "es5", "module": "system",
TopeScript [警告]转储到Cuffjs,考虑在Type Script中设置模块:“Stand”,以便直接转换到Stase.Relphi格式
好的,但是我已经安装了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>
测试
System.import('app').catch(函数(err){
控制台错误(err);
});
所以。问题是:为什么Typescript会说:
TopeScript [警告]转储到Cuffjs,考虑在Type Script中设置模块:“Stand”,以便直接转换到Stase.Relphi格式
当我调试web应用程序时,在浏览器控制台中?我假设您的systemjs.config.js
文件包含在您的粘贴箱中
这将配置systemjs使用该文件中的嵌入配置在浏览器中动态传输您的typescript
这很可能不是你想要的。相反,您应该在命令行上调用typescript。不要在index.html
中包含systemjs.config.js
,并确保编译后的app.js
文件在systemjs
将尝试从中获取它的位置可用,或者直接将其包含在
标记中。您收到该警告是因为您已将systemjs设置为在通过systemjs加载的任何typescript代码运行时进行传输,您已经配置了执行传输的插件,以生成commonjs
格式的模块
您在问题中显示了一个tsconfig.json
,但该文件不会被插件使用。插件使用的是SystemJS配置的以下部分,您在这里设置了“模块”:“commonjs”
:
您可以在用于传输的插件的源代码中找到生成警告的代码:
首先请注意,这只是一个警告。您可以继续使用TypeScript发出CommonJS模块。您得到警告的原因是,假设插件是针对SystemJS的,那么您必须在SystemJS中加载模块,并且您应该使用SystemJS的本机模块格式,而不是生成CommonJS模块。SystemJS可以加载CommonJS模块,但既然可以使用本机格式,为什么还要使用这种格式呢?一般来说,有理由让TypeScript编译器生成本机SystemJS格式以外的其他格式,但在这个特定上下文中,没有明确的理由这样做。这就是您收到警告的原因。您使用的是生成commonjs模块的moduleResolution节点,如果您是为web编译的,则不应使用该节点。:)@好的!我删除了这个字符串,现在TS显示了相同的错误,但更多。@toskvmoduleResolution
不会改变有关生成什么类型的模块tsc
的任何内容。我一直在使用moduleResolution:“node”
和module:“amd”
模块,我得到了很好的amd模块。事实上,moduleResolution:“节点”
在我的项目中是必要的,以允许tsc
正确地找到模块。顾名思义,moduleResolution
只是关于tsc
如何解析模块,而不是它生成什么类型的模块。@Louis感谢您的澄清。:)>>您应该在命令行上调用typescript如何做到这一点?mypackage.json,如果需要:“脚本”:{“开始”:“并发\”tsc-w \“\”lite server \”}
然后您只需运行npm start
,它将根据该脚本在监视模式下运行typescript。
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"
},
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`)
}