MANAGING YOUR
PROJECT DEPENDENCIES
GitHub: @theofidry
Twitter: @tfidry
1
Slide 2
Slide 2 text
“There is no solution,
only tradeoffs”
Managing your project dependencies
- Paul M. Jones
2
Slide 3
Slide 3 text
Scope
Managing your project dependencies
• Case of study: PHP framework agnostic
library
• POV: maintainer of the library
• Modern PHP version (Composer)
3
Slide 4
Slide 4 text
What are your project
dependencies?
Managing your project dependencies
4
Slide 5
Slide 5 text
Types of dependencies
Managing your project dependencies
• Hard dependencies
• Optional dependencies
• Dev dependencies
5
Slide 6
Slide 6 text
How to manage those
dependencies?
Managing your project dependencies
6
Slide 7
Slide 7 text
Managing your project dependencies
Image source: https://getcomposer.org/img/logo-composer-transparent5.png
Slide 8
Slide 8 text
Hard dependencies
Managing your project dependencies
8
Slide 9
Slide 9 text
Optional dependencies
Managing your project dependencies
9
Slide 10
Slide 10 text
Optional & Dev dependencies
Managing your project dependencies
10
Slide 11
Slide 11 text
Cool?
Managing your project dependencies
11
Slide 12
Slide 12 text
Managing your project dependencies
Image source: https://www.allmystery.de/i/tcce1a2_35567217.jpg
Slide 13
Slide 13 text
require-dev
limitations
Managing your project dependencies
13
Slide 14
Slide 14 text
You are changing your dependencies
Managing your project dependencies
14
Slide 15
Slide 15 text
Managing your project dependencies
symfony/yaml <3.0
15
Slide 16
Slide 16 text
Harder to detect
issues or incompatibilities
Managing your project dependencies
16
Slide 17
Slide 17 text
“Stupid” conflicts
Managing your project dependencies
static analysis tool
17
Slide 18
Slide 18 text
Annoying conflicts
Managing your project dependencies
never used together
18
Slide 19
Slide 19 text
Solutions?
Managing your project dependencies
19
Slide 20
Slide 20 text
Managing your project dependencies
Example #1
20
Slide 21
Slide 21 text
KISS: don’t use those
dependencies
Managing your project dependencies
21
Slide 22
Slide 22 text
Recap:
Managing your project dependencies
• pros: dead simple
• cons: you can’t use this dependency
22
Managing your project dependencies
What is a PHAR?
“The phar extension provides a way to put
entire PHP applications into a single file
called a "phar" (PHP Archive) “
Quote source: http://php.net/manual/en/intro.phar.php
25
Slide 26
Slide 26 text
26
Slide 27
Slide 27 text
Managing your project dependencies
Image source: http://fatcdn.hipobw1hofq5ehpwigfo4.netdna-cdn.com/wp-content/uploads/2015/07/dangercat5-768x1024.jpg
WARNING
Slide 28
Slide 28 text
The code of a PHAR is
not isolated
Managing your project dependencies
28
Slide 29
Slide 29 text
Managing your project dependencies
symfony/yaml 2.7.0
symfony/yaml 3.1.0
29
Possible outcomes
Managing your project dependencies
• Everything runs fine (lucky)
• Big fat error (a bit less luck)
• Very subtle nasty bug you’ll have hard
time to solve (wish you luck man)
31
Slide 32
Slide 32 text
When can you use a
PHAR?
Managing your project dependencies
32
Slide 33
Slide 33 text
When it doesn’t
execute your code
Managing your project dependencies
33
Slide 34
Slide 34 text
Recap:
Managing your project dependencies
• pros: solve the conflict problem
• cons:
• Inappropriate when PHARs must
execute code
• PHARs are not trackable
34
Slide 35
Slide 35 text
Managing your project dependencies
Track your PHARs with
tommy-muehle/tooly-composer-script
35
Slide 36
Slide 36 text
Managing your project dependencies
36
Slide 37
Slide 37 text
Managing your project dependencies
Example #2
37
Slide 38
Slide 38 text
Use multiple repositories
Managing your project dependencies
38