使用Grunt设置Babel + Uglify + Karma

时间:2016-05-02 00:07:00

标签: karma-jasmine babeljs grunt-contrib-uglify

我正在尝试使用上述技术设置构建工作流程,但是我收到了以下错误,这在运行karma的测试时似乎非常通用:

TypeError: 'undefined' is not an object (evaluating 'a.Sifter=b()')

即使不添加任何ECMSA6特定功能,也会发生这种情况。没有工作流程中的转换阶段,相同的工作流程可以正常工作。

我尝试的是在连接阶段之后和执行uglifying之前设置babeljs,如下面的片段:

  var defaultTasks = [
        "sass:prod", // compile scss sources
        "cleanAll", // clean folders: preparing for copy
        "copyAll", // copying bower files
        "cssmin:customVendor", // minify and concat 'customized from vendor' css
        "concat:vendorStyles", // concat vendors's css + minified 'customized from vendor' and distribute as 'css/vendor.css'
        "uglify:rawVendors", // minifies unminified vendors
        "concat:vendorScripts", // concat vendors's scripts and distribute as 'scripts/vendor.js'
        "ngAnnotate:app", // ng-annotates app's scripts
        "concat:appScripts", // concat app's (customized from vendor's + ng-annotated + customer's)
        "babel",// uses babeljs to convert brandnew ES6 javascript into ES5 allowing for old browsers
        "uglify:app" // minify app script and distribute as 'scripts/app.js'
    ];
    if (!skipTest) {
        defaultTasks.push("karma:target");  // run tests on minified scripts
    }

显示了重要的定义:

   babel: {
            options: {
                "presets": ['es2015']
            },
            dist: {
                files: {
                    "<%= concat.appScripts.dest %>": "<%= concat.appScripts.dest %>"
                }
            }
        },

        uglify: {
            options: {
                mangle: {
                    except: [
                        "jQuery", "angular", "tableau", "LZString", "moment", "Moment", "Modernizr",
                        "app", "modules"
                    ]
                }
            },
            app: {
                files: [{
                    src: ["<%= concat.appScripts.dest %>"],
                    dest: "<%= app.dist %>/scripts/app.js"
                }]
            }
        },

我已经测试过一点,从babel url运行默认逻辑,它运行良好,转换基本内容。

有没有更好的工作流程可以用来仍然针对真实执行的相同代码运行测试?

由于

1 个答案:

答案 0 :(得分:0)

最后,工作流程是正确的。

我只需稍微修改文件集,以避免转换selectize.js文件(这不是真正需要的)。

但是,不确定为什么会破坏

这解决了我,所以我关闭了这个问题,但也许对其他人有用。