diff --git a/lib/compiler.js b/lib/compiler.js index 70e7f65..63e4c99 100644 --- a/lib/compiler.js +++ b/lib/compiler.js @@ -6,6 +6,7 @@ var toposort = require('toposort'); var ConfigLoader = require('./config-loader'); var debug = require('debug')('loopback:boot:compiler'); var Module = require('module'); +var _ = require('lodash'); /** * Gather all bootstrap-related configuration data and compile it into @@ -61,6 +62,10 @@ module.exports = function compile(options) { bootScripts = bootScripts.concat(findScripts(dir)); }); + // de-dedup boot scripts -ERS + // https://github.com/strongloop/loopback-boot/issues/64 + bootScripts = _.uniq(bootScripts); + var modelsMeta = modelsConfig._meta || {}; delete modelsConfig._meta; diff --git a/test/compiler.test.js b/test/compiler.test.js index edc128e..c5a952d 100644 --- a/test/compiler.test.js +++ b/test/compiler.test.js @@ -405,6 +405,18 @@ describe('compiler', function() { expect(instructions.files.boot).to.eql([initJs]); }); + it('should remove duplicate scripts', function() { + appdir.createConfigFilesSync(); + var initJs = appdir.writeFileSync('custom-boot/init.js', + 'module.exports = function(app) { app.fnCalled = true; };'); + var instructions = boot.compile({ + appRootDir: appdir.PATH, + bootDirs:[path.dirname(initJs)], + bootScripts: [initJs] + }); + expect(instructions.files.boot).to.eql([initJs]); + }); + it('ignores models/ subdirectory', function() { appdir.createConfigFilesSync(); appdir.writeFileSync('models/my-model.js', '');