For JS the two tools I used directly are: Uglifyjs and Google Closure Compiler.
Both go beyond a simple substitution of variable names. They analyze code and can produce an even smaller version of your code by detecting dead functions or blocks (unattainable.)
Nowadays, in most cases for me, I no longer use these tools directly. They end up being invoked as part of a pipeline. Like, I write my code in ES6, hence something like this: *.js (ES6)
➔ Webpack
➔ Babel
➔ *.js (ES5)
➔ Uglify
➔ combinação (bundling)
➔ browser
.
For CSS, it’s hard to overshadow because the class names need to be the same as in your HTML and JS. Still you can compress a bit. In the past I used the YUI Compressor but today I also leave it all on account of a pipeline. I write my stylesheets on LESS and then: *.less
➔ Webpack
➔ lessc
➔ *.css
➔ minificação
➔ combinação (bundling)
➔ browser
.
Some of the above items are harder to use with Angular 1, especially Webpack. But you can delete them or look for alternatives.
Guy my code is naturally overshadowed, that’s a risk, not even I understand...lol
– MagicHat
I don’t see the need for code obfuscation, but if you have a basic knowledge of Node, there are some "compilers" that make it a lot easier :D
– Giovanni Bernini