Installation:
"bmatzner/require-bundle": "*" to composer.json under "require".composer update bmatzner/require-bundle.AppKernel.php:
new Bmatzner\RequireBundle\BmatznerRequireBundle(),
php app/console assets:install web
First Use Case:
<script type="text/javascript" src="{{ asset('bundles/bmatznerrequire/js/require.min.js') }}" data-main="{{ asset('js/app.js') }}"></script>
app.js (entry point) in web/js/:
require.config({ baseUrl: 'js' });
require(['module'], function(module) { /* ... */ });
Modular Asset Organization:
web/js/ (e.g., models/, views/, controllers/).require.config() in app.js to define paths:
require.config({
paths: {
'text': 'bundles/bmatznerrequire/js/plugins/text',
'i18n': 'bundles/bmatznerrequire/js/plugins/i18n'
}
});
Symfony Integration:
asset() to reference bundles dynamically:
{# app/config/config.yml #}
twig:
globals:
requirejs_base: "%kernel.root_dir%/../web/bundles/bmatznerrequire/js"
<script src="{{ requirejs_base }}/require.min.js" data-main="{{ asset('js/app.js') }}"></script>
Dependency Management:
text for templates, i18n for localization):
require(['text!templates/home.html'], function(template) { /* ... */ });
Debugging Workflow:
r.js (r.js optimizer) for production builds:
node node_modules/requirejs/bin/r.js -o build.js
build.js to optimize bundles:
({ appDir: 'web/js', baseUrl: 'js', dir: 'web/js/build', modules: [{ name: 'app' }] })
Asset Paths:
asset() fails if web/ is not the public root.assets:install targets the correct directory (e.g., --symlink for shared hosting).Plugin Conflicts:
text) may break builds.composer require requirejs/text --ignore-platform-req=php
Caching:
data-main changes require cache busting (e.g., ?v=1.0).asset() with versioning:
data-main="{{ asset('js/app.js', { version: '1.0' }) }}"
Deprecated Bundle:
Custom Builds:
BmatznerRequireBundle to extend RequireJS config:
// src/Bmatzner/RequireBundle/DependencyInjection/Configuration.php
$rootNode->children()
->scalarNode('base_url')->defaultValue('/js')->end();
Debugging:
requirejs.debug.js (included in the bundle) for stack traces:
<script src="{{ asset('bundles/bmatznerrequire/js/require.debug.js') }}"></script>
Localization:
trans filter:
require(['i18n!app/translations'], function(translations) {
console.log(translations['key']); // Symfony's {{ 'key'|trans }} equivalent
});
Performance:
require(['domReady!'], function() {
require(['module'], function(module) { /* ... */ });
});
How can I help you explore Laravel packages today?