Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions dev/tests/js/jasmine/tests/lib/mage/requirejs/mixins.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ define(['rjsResolver', 'mixins'], function (resolver, mixins) {
unbundledContext = require.s.contexts.$;
});

it('should copy nameToUrl from default context to unbundled context', function () {
expect(unbundledContext.nameToUrl).toBe(defContext.nameToUrl);
it('should keep a separate nameToUrl resolver in the unbundled context', function () {
expect(unbundledContext.nameToUrl).not.toBe(defContext.nameToUrl);
});

it('should not forward deps and callback to unbundled context during default context configure', function () {
it('should not forward deps, callback and bundles to unbundled context during ' +
'default context configure', function () {
var originalDeps = defContext.config.deps,
originalCallback = defContext.config.callback,
noop = function () {},
Expand All @@ -36,12 +37,18 @@ define(['rjsResolver', 'mixins'], function (resolver, mixins) {
spyOn(unbundledContext, 'configure').and.callThrough();

defContext.configure({
bundles: {
'tests/assets/mixins/bundle': [
'tests/assets/mixins/bundled-module'
]
},
deps: ['mixins'],
callback: noop
});

forwardedConfig = unbundledContext.configure.calls.mostRecent().args[0];

expect(forwardedConfig.bundles).toBeUndefined();
expect(forwardedConfig.deps).toBeUndefined();
expect(forwardedConfig.callback).toBeUndefined();

Expand Down
60 changes: 38 additions & 22 deletions lib/internal/Magento/Framework/RequireJs/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,54 +18,55 @@ class Config
/**
* Name of sub-directory where generated RequireJs config is placed
*
* @deprecated since 2.2.0 RequireJS Configuration file is moved into package directory
* @deprecated since 2.2.0 The generated RequireJS configuration is stored in package-specific config paths.
* @see \Magento\Framework\RequireJs\Config::getConfigFileRelativePath()
*/
const DIR_NAME = '_requirejs';
public const DIR_NAME = '_requirejs';

/**
* File name of RequireJs config
*/
const CONFIG_FILE_NAME = 'requirejs-config.js';
public const CONFIG_FILE_NAME = 'requirejs-config.js';

/**
* File name of RequireJs mixins
*/
const MIXINS_FILE_NAME = 'mage/requirejs/mixins.js';
public const MIXINS_FILE_NAME = 'mage/requirejs/mixins.js';

/**
* File name of RequireJs
*/
const REQUIRE_JS_FILE_NAME = 'requirejs/require.js';
public const REQUIRE_JS_FILE_NAME = 'requirejs/require.js';

/**
* File name of StaticJs
*/
const STATIC_FILE_NAME = 'mage/requirejs/static.js';
public const STATIC_FILE_NAME = 'mage/requirejs/static.js';

/**
* File name of minified files resolver
*/
const MIN_RESOLVER_FILENAME = 'requirejs-min-resolver.js';
public const MIN_RESOLVER_FILENAME = 'requirejs-min-resolver.js';

/**
* File name of RequireJs mixins
*/
const MAP_FILE_NAME = 'requirejs-map.js';
public const MAP_FILE_NAME = 'requirejs-map.js';

/**
* File name of BaseUrlInterceptorJs
*/
const URL_RESOLVER_FILE_NAME = 'mage/requirejs/baseUrlResolver.js';
public const URL_RESOLVER_FILE_NAME = 'mage/requirejs/baseUrlResolver.js';

/**
* File name of StaticJs
*/
const BUNDLE_JS_DIR = 'js/bundle';
public const BUNDLE_JS_DIR = 'js/bundle';

/**
* Template for combined RequireJs config file
*/
const FULL_CONFIG_TEMPLATE = <<<config
public const FULL_CONFIG_TEMPLATE = <<<config
(function(require){
%function%

Expand All @@ -76,7 +77,7 @@ class Config
/**
* Template for wrapped partial config
*/
const PARTIAL_CONFIG_TEMPLATE = <<<config
public const PARTIAL_CONFIG_TEMPLATE = <<<config
(function() {
%config%
require.config(config);
Expand Down Expand Up @@ -297,20 +298,35 @@ public function getMinResolverCode()
foreach ($this->minification->getExcludes('js') as $expression) {
$excludes[] = '!url.match(/' . str_replace('/', '\/', $expression) . '/)';
}
$excludesCode = empty($excludes) ? 'true' : implode('&&', $excludes);
$excludesCode = implode('&&', $excludes);

$result = <<<code
(function () {
var ctx = require.s.contexts._,
origNameToUrl = ctx.nameToUrl,
baseUrl = ctx.config.baseUrl;

ctx.nameToUrl = function() {
var url = origNameToUrl.apply(ctx, arguments);
if ({$excludesCode}) {
url = url.replace(/(\.min)?\.js$/, '.min.js');
}
return url;
newContext = require.s.newContext;

function applyMinResolver(context) {
var origNameToUrl = context.nameToUrl;

context.nameToUrl = function() {
var url = origNameToUrl.apply(context, arguments),
baseUrl = context.config.baseUrl;

if ({$excludesCode}) {
url = url.replace(/(\.min)?\.js$/, '.min.js');
}
return url;
};
}

applyMinResolver(ctx);

require.s.newContext = function () {
var context = newContext.apply(require.s, arguments);

applyMinResolver(context);

return context;
};
})();
code;
Expand Down
33 changes: 24 additions & 9 deletions lib/internal/Magento/Framework/RequireJs/Test/Unit/ConfigTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -196,15 +196,30 @@ public function testGetMinResolverCode()
$expected = <<<code
(function () {
var ctx = require.s.contexts._,
origNameToUrl = ctx.nameToUrl,
baseUrl = ctx.config.baseUrl;

ctx.nameToUrl = function() {
var url = origNameToUrl.apply(ctx, arguments);
if (url.indexOf(baseUrl)===0&&!url.match(/\.min\./)) {
url = url.replace(/(\.min)?\.js$/, '.min.js');
}
return url;
newContext = require.s.newContext;

function applyMinResolver(context) {
var origNameToUrl = context.nameToUrl;

context.nameToUrl = function() {
var url = origNameToUrl.apply(context, arguments),
baseUrl = context.config.baseUrl;

if (url.indexOf(baseUrl)===0&&!url.match(/\.min\./)) {
url = url.replace(/(\.min)?\.js$/, '.min.js');
}
return url;
};
}

applyMinResolver(ctx);

require.s.newContext = function () {
var context = newContext.apply(require.s, arguments);

applyMinResolver(context);

return context;
};
})();
code;
Expand Down
4 changes: 1 addition & 3 deletions lib/web/mage/requirejs/mixins.js
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,6 @@ require([
return originalContextRequire(deps, callback, errback);
};

unbundledContext.nameToUrl = defContext.nameToUrl;

/**
* Wrap original context configuration to update unbundled context,
* that way it is able to respect any changes done after mixins module has initialized.
Expand All @@ -234,7 +232,7 @@ require([
originalContextConfigure(cfg);

Object.keys(cfg || {}).forEach(function (key) {
if (key !== 'deps' && key !== 'callback') {
if (key !== 'deps' && key !== 'callback' && key !== 'bundles') {
unbundledCfg[key] = cfg[key];
}
});
Expand Down