From a35f4c9797a8dfb9f2798d016ddf49486855a5c2 Mon Sep 17 00:00:00 2001 From: Trent Willis Date: Wed, 22 Jun 2016 16:54:21 -0700 Subject: [PATCH] Make requires lazy to improve startup times --- index.js | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index b7c83bf5..351785f2 100644 --- a/index.js +++ b/index.js @@ -3,11 +3,8 @@ var path = require('path'); var fs = require('fs'); var resolve = require('resolve'); -var MergeTrees = require('broccoli-merge-trees'); -var Funnel = require('broccoli-funnel'); -var BabelTranspiler = require('broccoli-babel-transpiler'); -var Concat = require('broccoli-concat'); -var VersionChecker = require('ember-cli-version-checker'); + +var requireCache = {}; module.exports = { name: 'Ember CLI QUnit', @@ -33,6 +30,7 @@ module.exports = { init: function() { this._super.init && this._super.init.apply(this, arguments); + var VersionChecker = this.require('ember-cli-version-checker'); var checker = new VersionChecker(this); var dep = checker.for('ember-cli', 'npm'); @@ -48,8 +46,27 @@ module.exports = { return path.join(__dirname, 'blueprints'); }, + require: function(name) { + if (!requireCache) { + requireCache = {}; + } + + var requiredModule = requireCache[name]; + + if (!requiredModule) { + requiredModule = requireCache[name] = require(name); + } + + return requiredModule; + }, + + mergeTrees: function() { + var mergeTrees = this.require('broccoli-merge-trees'); + return mergeTrees.apply(null, arguments); + }, + treeForAddonTestSupport: function() { - return new MergeTrees(this._getDependencyTrees()); + return this.mergeTrees(this._getDependencyTrees()); }, treeForVendor: function(tree) { @@ -66,14 +83,16 @@ module.exports = { if (this._shouldImportEmberQUnit) { // support for Ember CLI < 2.2.0-beta.1 - var depTree = new MergeTrees(this._getDependencyTrees()); + var depTree = this.mergeTrees(this._getDependencyTrees()); + var BabelTranspiler = this.require('broccoli-babel-transpiler'); var transpiled = new BabelTranspiler(depTree, { loose: true, moduleIds: true, modules: 'amdStrict' }); + var Concat = this.require('broccoli-concat'); var concattedTree = new Concat(transpiled, { inputFiles: ['**/*.js'], outputFile: '/ember-qunit/ember-qunit.js', @@ -83,7 +102,7 @@ module.exports = { trees.push(concattedTree); } - return new MergeTrees(trees, { + return this.mergeTrees(trees, { annotation: 'ember-cli-qunit: treeForVendor' }); }, @@ -154,6 +173,7 @@ module.exports = { }, _notificationsTree: function() { + var Funnel = this.require('broccoli-funnel'); var notificationsPath = path.dirname(resolve.sync('qunit-notifications')); return new Funnel(notificationsPath, { include: [ 'index.js' ],