2015-10-20 63 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