38

Is it possible to compress multiple files with UglifyJS?

Something like...

uglifyjs -o app.build.js appfile1.js appfile2.js ...

Also, I am running Uglify via NodeJS in Windows Command Prompt

Jakub
  • 19,870
  • 8
  • 62
  • 92
jcreamer898
  • 7,809
  • 4
  • 39
  • 55

3 Answers3

52

Actually what you want to do (trick it into thinking its just 1 file) is just cat it

Linux

cat file1.js file2.js file3.js file4.js | uglifyjs -o files.min.js

Windows (untested)

type file1.js file2.js > uglifyjs -o files.min.js

OR

type file1.js file2.js > merged.files.js
uglifyjs -o merged.files.js
Jakub
  • 19,870
  • 8
  • 62
  • 92
41

For future readers of this question, w/ UglifyJS2, this is trivial now...

uglifyjs file1.js file2.js -o foo.min.js

There is also support for source maps too.

uglifyjs file1.js file2.js -o foo.min.js --source-map foo.min.js.map --source-map-root http://foo.com/src
jcreamer898
  • 7,809
  • 4
  • 39
  • 55
  • 3
    You can also use * to combine all JS files from a directory into a single file" `uglifyjs -o test.js /someTestDir/*` The docs say that the options should be first, and the files last; but these examples show the opposite. To quote https://github.com/mishoo/UglifyJS "filename should be the last argument and should name the file from which to read the JavaScript code" Does it not matter, or is this answer incorrect? – JeffryHouser Jan 10 '14 at 14:20
  • 2
    Just to add a a clarification to my previous comment, the * trick appears to be specific to Git Bash and is unrelated to UglifyJS. – JeffryHouser Jan 11 '14 at 01:10
3

No.

but as other answers states, in it current form, it can concatenate all of them in the same output. Which is not the same as is being asked.

If you have a dozen files that are individual modules. You can not uglify them all at the same time. Which is desirable because you save build time to start nodejs every time.

yuicompressor allows this, and the time saved by not starting up a jvm for each individual file is great. And in the end you do get file1-min.js, file2-min.js, etc... not one concatenated blob.

With uglify you will have to spawn one process per file if you do not want to concatenate output.

gcb
  • 12,288
  • 7
  • 58
  • 86