tsconfig 模块选项 - 'System' 是指 SystemJS 吗?

Posted

技术标签:

【中文标题】tsconfig 模块选项 - \'System\' 是指 SystemJS 吗?【英文标题】:tsconfig module options - does 'System' refer to SystemJS?tsconfig 模块选项 - 'System' 是指 SystemJS 吗? 【发布时间】:2018-06-16 23:33:19 【问题描述】:

在 tsconfig.json 文件中,可以将以下选项指定为 compilerOptions 'module' 属性的值:

System

所以我们得到:


  "compilerOptions": 
    "module": "System",
     ...

System 是否引用 SystemJS(即,如果 SystemJS 被用作模块加载器,当我创建 AngularJS 或 Angular 应用程序时,我的 tsconfig.json 中是否总是需要“System”)?文档似乎没有解释这一点:

https://www.typescriptlang.org/docs/handbook/compiler-options.html

在 TypeScript 的 Visual Studio 项目配置中,“TypeScript Build > Module system”下还有一个“System”选项,这显然与 tsconfig.json 中的“System”指的是相同的东西。

【问题讨论】:

是的,它是 SystemJS 【参考方案1】:

是的,它指的是 SystemJS,如果您希望 TypeScript 编译器按您预期的方式运行并生成您预期的代码,那么明确地包含它很重要。如果您不指定,TypeScript 将恢复为基于当前target ES 版本(默认为ES3,触发commonjs 模块)生成(并期待)代码。如编译器文档中所述,它将影响其他默认编译器选项,例如 moduleResolutionallowSyntheticDefaultImports

例如,如果你有一个 typescript 文件如下

import  functionA  from './moduleA';
functionA();

如果您将module 指定为system,您生成的代码将使用系统调用:

System.register(["./moduleA"], function (exports_1, context_1) 
    "use strict";
    var __moduleName = context_1 && context_1.id;
    var moduleA_1;
    return 
        setters: [
            function (moduleA_1_1) 
                moduleA_1 = moduleA_1_1;
            
        ],
        execute: function () 
            moduleA_1.functionA('Stuff');
        
    ;
);

但是,如果您允许编译器默认为commonjs,它将生成:

"use strict";
var moduleA_1 = require('./moduleA');
moduleA_1.functionA('Stuff');

请注意,生成的代码可能会根据 TS 版本或其他标志而有所不同。

来自测试/经验以及您链接的 module resolution 和 compiler 文档。

【讨论】:

谢谢 Greg,能否请您引用那些文档中阐明 System 选项是指 SystemJS 的部分?我很困惑为什么我在 Visual Studio 中为“amd”(这是一个通用概念)设置“模块”的值时在 Visual Studio 中有智能感知选项,你所说的“系统”是 SystemJS(一个特定的系统),以及一个标准的es2015!这是没有意义的 你可能对我关于 CommonJS 的问题感兴趣 - ***.com/questions/48142990/… 我添加到我的帖子中。模块解析文档直接链接到“Base Url”和“Path Mapping”下的 SystemJS 文档。我承认这仍然是推理,但生成的代码显然使用了 SystemJS 接口。我承认这很令人困惑,但是正在适应大量的库/标准。

以上是关于tsconfig 模块选项 - 'System' 是指 SystemJS 吗?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript的配置文件 tsconfig.json

Typescript错误在tsconfig.json中将模块更改为“umd”或“amd”时找不到模块'typescript-Collections'

tsconfig 选项“lib”有啥作用?

将 typescript 错误连接到其关联的编译器选项 (tsconfig.json)

错误:在“tsconfig”或“jsconfig”中设置“experimentalDecorators”选项以删除此警告

tsconfig.json 中模块类型的区别