是否可以在 compilerOptions 中设置多个目标?

问题描述 投票:0回答:2

抱歉,如果这是一个 n00b 问题,但我正在构建一个 Angular 应用程序并且我当前的 tsconfig.json 文件将“es6”作为“compilerOptions”中的“目标”:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "types" : []
  },
  "exclude": [
    "node_modules"
  ]
}

是否可以有多个目标?例如,我可以在 es5 中添加吗?我问这只是因为我正在阅读为 es5 编写的教程,但由于我项目的当前状态,我需要使用 es6 - 即,我无法降级。我所有的代码都必须符合 es6——如果两者都包括在内,我想我的代码可以同时符合 es5 和 es6。

javascript angular typescript
2个回答
14
投票

请记住,您还可以创建多个 tsconfig 文件并使用扩展功能创建一个覆盖大部分元素的基本 tsconfig,然后创建两个覆盖目标的目标 tsconfig。

基本 tsconfig:

{
    "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "types" : []
   },
   "exclude": [
     "node_modules"
   ]
}

ES5 tsconfig:

{
    "extends": "./base.json"
    "compilerOptions": {
        "target": "es5"
    }
}

ES6 tsconfig:

{
    "extends": "./base.json"
    "compilerOptions": {
        "target": "es6"
    }
}

然后你只需要运行你需要的任何目标:

tsc -p ./es6.json

这并不意味着你的代码会同时符合两者;但是,您可以选择向每个扩展基础的 tsconfig 添加一个

outDir
属性,并将输出编译到单独的目录中。


5
投票

配置只能指定one target

target
compilerOptions
属性接受单个字符串值。

ES5
指定为目标将 限制您使用 ES6 或更高版本编写源代码,它只是确保编译后的代码与只理解 ES5 或更低版本的客户端兼容。 lambda 表达式等特性将被编译为函数表达式。

const foo = (bar) => bar.replace('\t', '');
这样的表达式将被编译为
var foo = function (bar) { return bar.replace('\t', ''); };
,目标设置为
ES5

您需要将目标编译为 ES5 或 ES6 的地方实际上取决于将使用您的应用程序的设备/浏览器,此时 ES5 在兼容性方面肯定是更“安全”的选择。这是一个很好的资源,用于确定 ES6 浏览器的可比性

希望这有助于澄清事情!

© www.soinside.com 2019 - 2024. All rights reserved.