Sweetalert2打破了我的Angular2版本

时间:2017-01-24 23:15:27

标签: angular uglifyjs sweetalert rollup aot

我根据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'
    }
}

0 个答案:

没有答案