tsconfig.json 中模块类型的区别

Posted

技术标签:

【中文标题】tsconfig.json 中模块类型的区别【英文标题】:Difference between module type in tsconfig.json 【发布时间】:2017-05-10 15:18:01 【问题描述】:

在 tsconfig.json 中


    "compilerOptions": 
     "target": "es5",
     "module": "commonjs",
     "moduleResolution": "node",
     "sourceMap": true,
     "emitDecoratorMetadata": true,
     "experimentalDecorators": true,
     "removeComments": false,
     "noImplicitAny": false
  

我无法理解以下module 类型之间的区别:

“commonjs”、“amd”、“umd”、“system”、“es6”、“es2015”、“none”

问题:我应该使用哪个值以及何时应该使用它?

【问题讨论】:

【参考方案1】:

CommonJS 模式(或 nodejs):

var someOtherFunction = require('./someOtherFunction.js');
exports.add = function() 
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) 
        sum += args[i++];
    
    return sum;

ES6 模式:

import someOtherFunction from './someOtherFunction.js';

export function add() 
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) 
        sum += args[i++];
    
    return sum;

AMD 模式:

define(['someOtherFunction'], function () 
    return function () 
        var sum = 0, i = 0, args = arguments, l = args.length;
        while (i < l) 
            sum += args[i++];
        
        return sum;
    ;
);

异步模块定义 (AMD) 是最流行的客户端代码,而 node.js 模块(CommonJS Modules/1.1 的扩展)是服务器端环境中的主要模式。

通用模块定义 (UMD) 是一组样板配方,试图弥合 AMD 和 node.js 之间的差异,允许工程师以单一格式编写代码库,而不是编写两种格式,或在构建步骤中转换为另一种格式。

ES5 是您以前看到的普通 javascript

您将在 Angular2 中使用 ES6,也称为 ECMAScript 2015。

【讨论】:

使用 ES6 是否支持所有新旧浏览器 显然不是,但是您定义了 target="es5" ,这意味着它将被编译为大多数浏览器都支持的 es5 。所以你很好 哪种模块类型更灵活或支持任何浏览器使用 @kokadwarprafulla,刚刚解释过,你会使用 ES6 ,它会被编译成 Es5 并且得到很好的支持, 如果第一个例子定义了“add”函数,然后通过module.exports = add 导出,不是更能暗示commonjs吗?

以上是关于tsconfig.json 中模块类型的区别的主要内容,如果未能解决你的问题,请参考以下文章

TsLint/TsConfig:模块“共享”未在 package.json 中列为依赖项

es6 和 es2017 之间 tsconfig.json 中“lib”属性的区别?

打字稿 2.0。 tsconfig.json 中的“类型”字段

Angular-cli.json 、 webpack.conf 和 tsconfig.json 之间的区别

找不到在 tsconfig `paths` 中定义的模块

如何为不在@types 中的类型配置 tsconfig.json?