【发布时间】:2017-06-11 10:22:56
【问题描述】:
我在我的项目中使用Angular-CLI (ng-cli)。当我输入ng serve 时,应用程序就会运行。但是,当我输入ng serve --prod 时,出现以下错误。
是a known issue that UglifyJs cannot parse ES6。
此外,这些 SO 帖子(here 和 here)建议将 tsconfig.json 更改为目标 es5。我不清楚的是它们是指消费 Angular 项目的 tsconfig.json 还是用于生成库的项目。无论如何,我的 Angular 项目的tsconfig.json 已经针对es5。如下所示。
{
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es6", "dom"],
"mapRoot": "./",
"module": "es6",
"moduleResolution": "node",
"outDir": "../dist/out-tsc",
"sourceMap": true,
"target": "es5",
"typeRoots": [
"../node_modules/@types"
]
}
}
导入到 Angular 项目中的库的tsconfig.json 如下所示,它的目标不是es5,而是es6。顺便说一句,我不能简单地将这个库中的开关从es6 切换回es5(我刚刚尝试过),因为我正在使用es6 类,如Set 和Map(这些类的使用是如此严重,以至于至少可以说更改它们并非易事;如果我知道所有这些,我会选择完全避免使用 es6 功能)。
{
"compilerOptions": {
"noImplicitAny": true,
"target": "es6",
"module": "commonjs",
"alwaysStrict": true,
"diagnostics": false,
"listEmittedFiles": false,
"listFiles": false,
"pretty": true,
"declaration": true
}
}
这是我的问题。
- 在使用
ng serve --prod时如何使用Angular-CLI 禁用丑化? - 是我的 Angular 项目的
es5/es6目标还是导入的库有问题? - SO 帖子似乎暗示我可以在 Angular-CLI 通过 UglifyJs for
ng serve --prod之前通过 babel(我以前从未使用过)预处理导入的库。此程序是否记录在案?如果是这样,请让我知道如何执行此操作。angular-cli.json是我了解配置 ng-cli 的地方。如果这个建议是真的,我无法确定如何挂钩 babel 预处理。
【问题讨论】:
-
仅供参考,我的解决方法是从 TS -> ES6 -> (babel) -> ES5 编译我的外部库。这是我现在唯一的方法。
-
将 ES6 转换为 ES5 会显着增加构建时间,请参阅下面的答案。希望对您有所帮助...
-
@JaneWayne 你是如何在 (babel) 步骤中添加的?
标签: angular ecmascript-6 babeljs angular-cli uglifyjs