Skip to content

Commit 28f4ae7

Browse files
committed
[symfony#2406] Proofreading new UglifyJs entry by @Sgoettschkes
* Updating some language * Adding additional clarification details * Updating to use UglifyJS version 2, since this is merged into Symfony 2.2, which uses an AsseticBundle that supports this Uglify version
1 parent 07b3d2f commit 28f4ae7

File tree

6 files changed

+109
-75
lines changed

6 files changed

+109
-75
lines changed

book/page_creation.rst

+2
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ application should greet you:
245245
246246
http://localhost/app_dev.php/hello/Ryan
247247
248+
.. _book-page-creation-prod-cache-clear:
249+
248250
.. tip::
249251

250252
You can also view your app in the "prod" :ref:`environment<environments-summary>`

cookbook/assetic/asset_management.rst

+2
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,8 @@ by Symfony (as the asset files are in the ``dev`` environment). This is on
359359
purpose - letting Symfony generate these files dynamically in a production
360360
environment is just too slow.
361361

362+
.. _cookbook-asetic-dump-prod:
363+
362364
Instead, each time you use your app in the ``prod`` environment (and therefore,
363365
each time you deploy), you should run the following task:
364366

cookbook/assetic/index.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Assetic
55
:maxdepth: 2
66

77
asset_management
8-
yuicompressor
98
uglifyjs
9+
yuicompressor
1010
jpeg_optimize
1111
apply_to_option

cookbook/assetic/uglifyjs.rst

+97-73
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,60 @@ How to Minify CSS/JS Files (using UglifyJs and UglifyCss)
55
=========================================================
66

77
`UglifyJs`_ is a javascript parser/compressor/beautifier toolkit. It can be used
8-
to combine and minify javascript assets so they need less HTTP requests and makes
9-
the website load faster. `UglifyCss`_ is a css compressor/beautifier much like
10-
`UglifyJs`.
8+
to combine and minify javascript assets so that they require less HTTP requests
9+
and make your site load faster. `UglifyCss`_ is a css compressor/beautifier
10+
that is very similar to UglifyJs.
1111

12-
In this cookbook, the installation, configuration and usage of `UglifyJs` is shown
13-
in detail. `UglifyCss` works pretty much the same way and is only talked about briefly.
12+
In this cookbook, the installation, configuration and usage of UglifyJs is
13+
shown in detail. ``UglifyCss`` works pretty much the same way and is only
14+
talked about briefly.
1415

1516
Install UglifyJs
1617
----------------
1718

18-
UglifyJs is build as an node.js npm module and can be installed using npm. First,
19-
you need to `install node.js`_. Afterwards you can install UglifyJs using npm:
19+
UglifyJs is available as an `Node.js`_ npm module and can be installed using
20+
npm. First, you need to `install node.js`_. Afterwards you can install UglifyJs
21+
using npm:
2022

2123
.. code-block:: bash
2224
23-
$ npm install -g uglify-js@1
24-
25+
$ npm install -g uglify-js
26+
27+
This command will install UglifyJs globally and you may need to run it as
28+
a root user.
29+
2530
.. note::
2631

27-
It's also possible to install UglifyJs for your symfony project only. To do this,
28-
install it without the ``-g`` option and specify the path where to put the module:
29-
32+
It's also possible to install UglifyJs inside your project only. To do
33+
this, install it without the ``-g`` option and specify the path where
34+
to put the module:
35+
3036
.. code-block:: bash
31-
32-
$ npm install uglify-js@1 /path/to/symfony/app/Resources
33-
37+
38+
$ cd /path/to/symfony
39+
$ mkdir app/Resources/node_modules
40+
$ npm install uglify-js --prefix app/Resources
41+
3442
It is recommended that you install UglifyJs in your ``app/Resources`` folder
35-
and add the ``node_modules`` folder to version control.
36-
37-
.. tip::
38-
39-
This cookbook uses UglifyJs 1 instead of the newer version 2 to be compatible
40-
with old assetic versions. If you want to use UglifyJs version 2, make sure
41-
to also use the assetic filter for this version and apply the correct configuration.
43+
and add the ``node_modules`` folder to version control. Alternatively,
44+
you can create an npm `package.json`_ file and specify your dependencies
45+
there.
46+
47+
Depending on your installation method, you should either be able to execute
48+
the ``uglifyjs`` executable globally, or execute the physical file that lives
49+
in the ``node_modules`` directory:
50+
51+
.. code-block:: bash
52+
53+
$ uglifyjs --help
4254
43-
Configure the UglifyJs Filter
44-
-----------------------------
55+
$ ./app/Resources/node_modules/.bin/uglifyjs --help
4556
46-
Now we need to configure symfony2 to use the UglifyJs Filter when processing your
47-
stylesheets:
57+
Configure the uglifyjs2 Filter
58+
------------------------------
59+
60+
Now we need to configure Symfony2 to use the ``uglifyjs2`` filter when processing
61+
your javascripts:
4862

4963
.. configuration-block::
5064

@@ -53,15 +67,16 @@ stylesheets:
5367
# app/config/config.yml
5468
assetic:
5569
filters:
56-
uglifyjs:
70+
uglifyjs2:
71+
# the path to the uglifyjs executable
5772
bin: /usr/local/bin/uglifyjs
5873
5974
.. code-block:: xml
6075
6176
<!-- app/config/config.xml -->
6277
<assetic:config>
6378
<assetic:filter
64-
name="uglifyjs"
79+
name="uglifyjs2"
6580
bin="/usr/local/bin/uglifyjs" />
6681
</assetic:config>
6782
@@ -70,7 +85,7 @@ stylesheets:
7085
// app/config/config.php
7186
$container->loadFromExtension('assetic', array(
7287
'filters' => array(
73-
'uglifyjs' => array(
88+
'uglifyjs2' => array(
7489
'bin' => '/usr/local/bin/uglifyjs',
7590
),
7691
),
@@ -92,7 +107,7 @@ stylesheets:
92107
If you installed UglifyJs locally, you can find the bin folder inside
93108
the ``node_modules`` folder. It's called ``.bin`` in this case.
94109

95-
You now have access to the ``uglifyjs`` Filter in your application.
110+
You now have access to the ``uglifyjs2`` filter in your application.
96111

97112
Minify your Assets
98113
------------------
@@ -104,15 +119,15 @@ your assets are a part of the view layer, this work is done in your templates:
104119

105120
.. code-block:: html+jinja
106121

107-
{% javascripts '@AcmeFooBundle/Resources/public/js/*' filter='uglifyjs' %}
122+
{% javascripts '@AcmeFooBundle/Resources/public/js/*' filter='uglifyjs2' %}
108123
<script src="{{ asset_url }}"></script>
109124
{% endjavascripts %}
110125
111126
.. code-block:: html+php
112127

113128
<?php foreach ($view['assetic']->javascripts(
114129
array('@AcmeFooBundle/Resources/public/js/*'),
115-
array('uglifyjs')
130+
array('uglifyj2s')
116131
) as $url): ?>
117132
<script src="<?php echo $view->escape($url) ?>"></script>
118133
<?php endforeach; ?>
@@ -121,16 +136,55 @@ your assets are a part of the view layer, this work is done in your templates:
121136

122137
The above example assumes that you have a bundle called ``AcmeFooBundle``
123138
and your JavaScript files are in the ``Resources/public/js`` directory under
124-
your bundle. This isn't important however - you can include your Javascript
139+
your bundle. This isn't important however - you can include your JavaScript
125140
files no matter where they are.
126141

127-
With the addition of the ``uglifyjs`` filter to the asset tags above, you should
128-
now see minified JavaScripts coming over the wire much faster.
142+
With the addition of the ``uglifyjs2`` filter to the asset tags above, you
143+
should now see minified JavaScripts coming over the wire much faster.
144+
145+
Disable Minification in Debug Mode
146+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
147+
148+
Minified JavaScripts are very difficult to read, let alone debug. Because of
149+
this, Assetic lets you disable a certain filter when your application is in
150+
debug (e.g. ``app_dev.php``) mode. You can do this by prefixing the filter name
151+
in your template with a question mark: ``?``. This tells Assetic to only
152+
apply this filter when debug mode is off (e.g. ``app.php``):
153+
154+
.. configuration-block::
155+
156+
.. code-block:: html+jinja
157+
158+
{% javascripts '@AcmeFooBundle/Resources/public/js/*' filter='?uglifyjs2' %}
159+
<script src="{{ asset_url }}"></script>
160+
{% endjavascripts %}
161+
162+
.. code-block:: html+php
163+
164+
<?php foreach ($view['assetic']->javascripts(
165+
array('@AcmeFooBundle/Resources/public/js/*'),
166+
array('?uglifyjs2')
167+
) as $url): ?>
168+
<script src="<?php echo $view->escape($url) ?>"></script>
169+
<?php endforeach; ?>
170+
171+
To try this out, switch to your ``prod`` environment (``app.php``). But before
172+
you do, don't forget to :ref:`clear your cache<book-page-creation-prod-cache-clear>`
173+
and :ref:`dump your assetic assets<cookbook-asetic-dump-prod>`.
174+
175+
.. tip::
176+
177+
Instead of adding the filter to the asset tags, you can also globally
178+
enable it by adding the apply-to attribute to the filter configuration, for
179+
example in the ``uglifyjs2`` filter ``apply_to: "\.js$"``. To only have
180+
the filter applied in production, add this to the ``config_prod`` file
181+
rather than the common config file. For details on applying filters by
182+
file extension, see :ref:`cookbook-assetic-apply-to`.
129183

130184
Install, configure and use UglifyCss
131185
------------------------------------
132186

133-
The usage of `UglifyCss` works the same way as `UglifyJs`. First, make sure
187+
The usage of UglifyCss works the same way as UglifyJs. First, make sure
134188
the node package is installed:
135189

136190
.. code-block:: bash
@@ -169,8 +223,8 @@ Next, add the configuration for this filter:
169223
),
170224
));
171225
172-
To use the filter for your css files, make sure to use the assetics helper in
173-
your template:
226+
To use the filter for your css files, add the filter to the Assetic ``stylesheets``
227+
helper:
174228

175229
.. configuration-block::
176230

@@ -189,42 +243,12 @@ your template:
189243
<link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
190244
<?php endforeach; ?>
191245
192-
Disable Minification in Debug Mode
193-
----------------------------------
194-
195-
Minified JavaScripts are very difficult to read, let alone
196-
debug. Because of this, Assetics lets you disable a certain filter when your
197-
application is in debug mode. You can do this by prefixing the filter name
198-
in your template with a question mark: ``?``. This tells Assetics to only
199-
apply this filter when debug mode is off.
200-
201-
.. configuration-block::
202-
203-
.. code-block:: html+jinja
204-
205-
{% javascripts '@AcmeFooBundle/Resources/public/js/*' filter='?uglifyjs' %}
206-
<script src="{{ asset_url }}"></script>
207-
{% endjavascripts %}
208-
209-
.. code-block:: html+php
210-
211-
<?php foreach ($view['assetic']->javascripts(
212-
array('@AcmeFooBundle/Resources/public/js/*'),
213-
array('?uglifyjs')
214-
) as $url): ?>
215-
<script src="<?php echo $view->escape($url) ?>"></script>
216-
<?php endforeach; ?>
217-
218-
.. tip::
219-
220-
Instead of adding the filter to the asset tags, you can also globally
221-
enable it by adding the apply-to attribute to the filter configuration, for
222-
example in the ``uglifyjs`` filter ``apply_to: "\.js$"``. To only have the filter
223-
applied in production, add this to the ``config_prod`` file rather than the
224-
common config file. For details on applying filters by file extension,
225-
see :ref:`cookbook-assetic-apply-to`.
226-
246+
Just like with the ``uglifyjs2`` filter, if you prefix the filter name with
247+
``?`` (i.e. ``?uglifycss``), the minification will only happen when you're
248+
not in debug mode.
227249

228250
.. _`UglifyJs`: https://github.com/mishoo/UglifyJS
229251
.. _`UglifyCss`: https://github.com/fmarcia/UglifyCSS
252+
.. _`Node.js`: http://nodejs.org/
230253
.. _`install node.js`: http://nodejs.org/
254+
.. _`package.json`: http://package.json.nodejitsu.com/

cookbook/assetic/yuicompressor.rst

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ Yahoo! provides an excellent utility for minifying JavaScripts and stylesheets
88
so they travel over the wire faster, the `YUI Compressor`_. Thanks to Assetic,
99
you can take advantage of this tool very easily.
1010

11+
.. caution::
12+
13+
The YUI Compressor is going through a `deprecation process`_. But don't
14+
worry! See :doc:`/cookbook/assetic/uglifyjs` for an alternative.
15+
1116
Download the YUI Compressor JAR
1217
-------------------------------
1318

@@ -161,3 +166,4 @@ apply this filter when debug mode is off.
161166

162167
.. _`YUI Compressor`: http://developer.yahoo.com/yui/compressor/
163168
.. _`Download the JAR`: http://yuilibrary.com/projects/yuicompressor/
169+
.. _`deprecation process`: http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/

cookbook/map.rst.inc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
* :doc:`/cookbook/assetic/index`
22

33
* :doc:`/cookbook/assetic/asset_management`
4-
* :doc:`/cookbook/assetic/yuicompressor`
54
* :doc:`/cookbook/assetic/uglifyjs`
5+
* :doc:`/cookbook/assetic/yuicompressor`
66
* :doc:`/cookbook/assetic/jpeg_optimize`
77
* :doc:`/cookbook/assetic/apply_to_option`
88

0 commit comments

Comments
 (0)