2015-10-20 66 views
4

我的项目中有一些文件,我想移出正常的应用程序树并只在某些情况下加载。目前我使用broccoli-stew来移动文件和broccoli-babel-transpiler来传输目标文件。但是,当我这样做时,我最终在导入的文件上添加了一个额外的default对象。正确babel用ember-cli-build编译一个文件

这段代码被添加到顶部

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 

var _Ember = _interopRequireDefault(_ember); 

,这使我有写有作为Ember["default"].Object等来烬引用源文件想没有在源文件中的奇引用使其他开发人员更难理解。

这是我目前ember-cli-build.js文件

/* global require, module */ 
var stew = require('broccoli-stew'); 
var esTranspiler = require('broccoli-babel-transpiler'); 
var EmberApp = require('ember-cli/lib/broccoli/ember-app'); 

module.exports = function(defaults) { 
    var app = new EmberApp(defaults, { 
    storeConfigInMeta: false 
    }); 

    var additionalTrees = []; 
    var appTree = app.appAndDependencies(); 

    if (EmberApp.env() !== "production") { 
    var jQuery = stew.find(appTree, "bower_components/jquery/dist/jquery.min.js"); 
    jQuery = stew.mv(jQuery, "bower_components/jquery/dist/jquery.min.js", "assets/jquery.js"); 

    additionalTrees.push(jQuery); 
    } 

    function extractRouter(fileName) { 
    var router = stew.find(appTree, 'mobile-web/'+ fileName + '.js'); 
    router = esTranspiler(router, { 
     modules: "amd", 
     moduleIds: true, 
     moduleId: "mobile-web/router" 
    }); 
    router = stew.mv(router, 'mobile-web/'+ fileName + '.js', 'assets/'+ fileName + '.js'); 
    additionalTrees.push(router); 
    } 

    extractRouter('router'); 
    extractRouter('secure-router'); 

    return app.toTree(additionalTrees); 
}; 

回答

3

尽量配置esTranspiler使用modules: "amdStrict"

router = esTranspiler(router, { 
    modules: "amdStrict",// here 
    moduleIds: true, 
    moduleId: "mobile-web/router" 
}); 

docs描述它类似于"commonStrict"amdScrict存在于源代码here中。

commonStrict

+0

我认为这是'babel v5'有效。文档链接已过时,但代码链接可用于[最新v5发行版](https://github.com/babel/babel/blob/v5.8.38/packages/babel/src/transformation/modules/ AMD-strict.js) – morhook