我根据Angular Cookbook使用了非常标准的AOT和Rollup构建:
rollup.config.js:
Data
tsconfig-aot.json:
import rollup from 'rollup'
import nodeResolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs';
import uglify from 'rollup-plugin-uglify'
export default {
entry: 'app/main-aot.js',
dest: 'dist/process-tracker.js', // output a single application bundle
sourceMap: true,
sourceMapFile: 'dist/process-tracker.js.map',
format: 'iife',
plugins: [
nodeResolve({jsnext: true, module: true}),
commonjs({
include: ['node_modules/**'],
namedExports: {
'node_modules/lodash/lodash.js': ['merge', 'clone', 'cloneDeep']
}
}),
uglify()
]
}
最初编译和uglified按照预期编译,但我最近创建了一个对sweetalert2依赖的对话服务。现在,当我运行我的aot和汇总任务时,uglify步骤失败并显示{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2015", "dom"],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"typeRoots": [
"node_modules/@types/"
]
},
"files": [
"app/app.module.ts",
"app/main-aot.ts"
],
"angularCompilerOptions": {
"genDir": "aot",
"skipMetadataEmit" : true
}
}
我将其追溯到我的包中的sweetalert代码:
Error transforming bundle with 'uglify' plugin: SyntaxError: Unexpected token: operator (>)
因此,来自此lib的胖箭头函数正在通过编译器不受影响。 UglifyJS爆炸,因为它还不支持这种语法。我已经开始讨论如何配置SystemJS,但这并没有改变行为。这就是我目前所拥有的:
const swalPrefix = 'swal2-';
const prefix = (items) => {
const result = {};
for (const i in items) {
result[items[i]] = swalPrefix + items[i];
}
return result
};
有没有办法可以让ngc编译器或汇总来关注这个第三方代码并将其转换为ES5?
更新:
答案必须与SystemJS的工作方式相同?我指向的dist文件没有ES6语法 - 它们已经清楚地被翻译过了。那么为什么实际的源文件会被拉入?
更新更新:
不,这可以'是一个SystemJS的事情。它必须是Rollup或其中一个插件。我已经完成了针对commonjs和node-resolve插件的文档和问题,但还没有找到任何可以帮助我理解正在发生的事情的东西。我已经将commonjs include数组改为不太通用,但没有改变:
map: {
'sweetalert2': 'npm:sweetalert2'
}
packages: {
sweetalert2: {
main: './dist/sweetalert2.js',
defaultExtension: 'js'
}
}