diff --git a/spec/index.spec.js b/spec/index.spec.js index 6b969c7..9ac0949 100644 --- a/spec/index.spec.js +++ b/spec/index.spec.js @@ -96,6 +96,23 @@ describe('Loader', function() { checkResult(loadedString, result); }); + it('should return a plain javascript loadChildren async require statement', function() { + var result = [ + 'loadChildren: () => new Promise(function (resolve) {', + ' require.ensure([], function (require) {', + ' resolve(require(\'./path/to/file.module\')[\'FileModule\']);', + ' });', + '})' + ]; + + var loadedString = loader.call({ + resourcePath: resourcePath.replace('.ts', '.js'), + query: query + }, `loadChildren: '${modulePath}'`); + + checkResult(loadedString, result); + }); + it('should return a loadChildren sync require statement', function() { var result = [ 'loadChildren: function() {', diff --git a/spec/utils.spec.js b/spec/utils.spec.js index 5c75a4f..fd68b50 100644 --- a/spec/utils.spec.js +++ b/spec/utils.spec.js @@ -52,6 +52,17 @@ describe('Utils', function() { getRequireLoader('path', undefined, 'name', true).should.eql(result.join('')); }); + it('should return an asynchronous require loadChildren statement with vanilla javascript', function() { + var result = [ + 'loadChildren: () => new Promise(function (resolve) {', + ' require.ensure([], function (require) {', + ' resolve(' + getRequireString(path, name) + ');', + ' }, \'name\');', + '})' + ]; + getRequireLoader('path', 'name', 'name', true, true).should.eql(result.join('')); + }); + }); describe('getSystemLoader', function() { diff --git a/src/index.js b/src/index.js index 1f84a9e..75aa01e 100644 --- a/src/index.js +++ b/src/index.js @@ -25,6 +25,7 @@ module.exports = function(source, sourcemap) { // get the filename path var resourcePath = this.resourcePath; var filename = utils.getFilename(resourcePath); + var isJs = path.extname(resourcePath).toLowerCase() === '.js'; var replacedSource = source.replace(loadChildrenRegex, function(match, loadString) { // check for query string in loadString @@ -90,7 +91,7 @@ module.exports = function(source, sourcemap) { } else if (loader === 'system') { replacement = utils.getSystemLoader(filePath, moduleName, inline); } else { - replacement = utils.getRequireLoader(filePath, chunkName, moduleName, inline); + replacement = utils.getRequireLoader(filePath, chunkName, moduleName, inline, isJs); } if (debug) { diff --git a/src/utils.js b/src/utils.js index b478a9b..58d3227 100644 --- a/src/utils.js +++ b/src/utils.js @@ -17,13 +17,13 @@ module.exports.getSyncLoader = function(filePath, moduleName, inline) { return inline ? result.join('') : result.join('\n'); }; -module.exports.getRequireLoader = function(filePath, chunkName, moduleName, inline) { +module.exports.getRequireLoader = function(filePath, chunkName, moduleName, inline, isJs) { var requireString = module.exports.getRequireString(filePath, moduleName); var webpackChunkName = chunkName ? ', \'' + chunkName + '\'' : ''; var result = [ 'loadChildren: () => new Promise(function (resolve) {', - ' (require as any).ensure([], function (require: any) {', + ' ' + (isJs ? 'require' : '(require as any)') + '.ensure([], function (' + (isJs ? 'require' : 'require: any') + ') {', ' resolve(' + requireString + ');', ' }' + webpackChunkName + ');', '})'