Angular 为什么我会收到一条警告,说我应该将模块格式设置为";系统";?

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",

My Typescript在控制台中显示错误:

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显示了相同的错误,但更多。@toskv
moduleResolution
不会改变有关生成什么类型的模块
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`)
}