正确的babel使用额外的树在ember-cli-build中传输一个文件

时间:2015-10-20 18:00:02

标签: ember.js ember-cli ecmascript-6 babeljs broccolijs

我的项目中有一些文件,我想移出正常的应用程序树,只在某些情况下加载。目前,我使用broccoli-stew移动文件,使用broccoli-babel-transpiler来转换目标文件。但是,当我这样做时,我最终会在导入的文件上添加一个default对象。

此代码已添加到顶部

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

var _Ember = _interopRequireDefault(_ember);

这导致我必须编写源文件,并将对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);
};

1 个答案:

答案 0 :(得分:3)

尝试配置您的esTranspiler以使用modules: "amdStrict"

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

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

commonStrict