Running cabal install
for the first time, we get a full report of the steps taken to build the project.
hproject$ cabal install
Resolving dependencies...
Downloading SDL-0.6.4...
[1 of 1] Compiling Main ( /tmp/SDL-0.6.4-6210/SDL-0.6.4/Setup.lhs, /tmp/SDL-0.6.4-6210/SDL-0.6.4/dist/setup/Main.o )
Linking /tmp/SDL-0.6.4-6210/SDL-0.6.4/dist/setup/setup ...
Configuring SDL-0.6.4...
configure: WARNING: unrecognized options: --with-compiler, --with-gcc
checking for sdl-config... /usr/bin/sdl-config
configure: creating ./config.status
config.status: creating config.mk
config.status: creating SDL.buildinfo
config.status: creating includes/HsSDLConfig.h
configure: WARNING: unrecognized options: --with-compiler, --with-gcc
Building SDL-0.6.4...
Preprocessing library SDL-0.6.4...
[ 1 of 16] Compiling Graphics.UI.SDL.Utilities ( Graphics/UI/SDL/Utilities.hs, dist/build/Graphics/UI/SDL/Utilities.o )
*** (Info on dependency module compilation, elided)
[16 of 16] Compiling Graphics.UI.SDL ( Graphics/UI/SDL.hs, dist/build/Graphics/UI/SDL.o )
In-place registering SDL-0.6.4...
Installing library in /home/USER/.cabal/lib/x86_64-linux-ghc-7.6.3/SDL-0.6.4
Registering SDL-0.6.4...
Installed SDL-0.6.4
Configuring hproject-0.0.1...
*** (Info on the compiling hproject files, elided)
Linking dist/build/hproject/hproject ...
Installing executable(s) in /home/USER/.cabal/bin
Installed hproject-0.0.1
hproject$
When we run cabal install
without introducing any changes in the project source, the tool's output is much more consice:
hproject$ cabal install
Resolving dependencies...
Configuring hproject-0.0.1...
Building hproject-0.0.1...
Preprocessing executable 'hproject' for hproject-0.0.1...
Installing executable(s) in /home/USER/.cabal/bin
Installed hproject-0.0.1
hproject$
That's only six lines of output on the idempotent second compile, vs. potentially thousands on the first, clean compile.
Installing the expressjs dependency for an empty project:
jsproject$ npm install
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/express/-/express-3.5.1.tgz
*** (Many, many lines of output elided)
npm http 200 https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz
express@3.5.1 node_modules/express
├── methods@0.1.0
├── merge-descriptors@0.0.2
├── debug@0.8.0
├── cookie-signature@1.0.3
├── range-parser@1.0.0
├── fresh@0.2.2
├── buffer-crc32@0.2.1
├── cookie@0.1.1
├── mkdirp@0.3.5
├── send@0.2.0 (mime@1.2.11)
├── commander@1.3.2 (keypress@0.1.0)
└── connect@2.14.1 (response-time@1.0.0, connect-timeout@1.0.0, pause@0.0.1, method-override@1.0.0, static-favicon@1.0.0, vhost@1.0.0, qs@0.6.6, basic-auth-connect@1.0.0, morgan@1.0.0, serve-static@1.0.2, bytes@0.2.1, raw-body@1.1.3, errorhandler@1.0.0, cookie-parser@1.0.1, compression@1.0.0, csurf@1.0.0, express-session@1.0.2, serve-index@1.0.1, multiparty@2.2.0)
That was quite noisy and colorful! However, if we run it again, without changing anything in the project:
jsproject$ npm install
jsproject$
We are treated with ZERO LINES OF OUTPUT! Very elegant. No changes were actually made, and our clean and uncluttered terminal screen is a clear indication of this fact.