Coder Social home page Coder Social logo

uglifyify's Introduction

uglifyify

A Browserify v2 transform which minifies your code using terser (a maintained fork of uglify-es).

Installation

npm install uglifyify

Motivation/Usage

Ordinarily you'd be fine doing this:

browserify index.js | uglifyjs -c > bundle.js

But uglifyify is able to yield smaller output by processing files individually instead of just the entire bundle. When using uglifyify you should generally also use Uglify, to achieve the smallest output. Uglifyify provides an additional optimization when used with Uglify, but does not provide all of the optimization that using Uglify on its own does, so it's not a replacement.

Uglifyify gives you the benefit of applying Uglify's "squeeze" transform on each file before it's included in the bundle, meaning you can remove dead code paths for conditional requires. Here's a contrived example:

if (true) {
  module.exports = require('./browser')
} else {
  module.exports = require('./node')
}

module.exports = require('./node') will be excluded by Uglify, meaning that only ./browser will be bundled and required.

If you combine uglifyify with envify, you can make this a little more accessible. Take this code:

if (process.env.NODE_ENV === 'development') {
  module.exports = require('./development')
} else {
  module.exports = require('./production')
}

And use this to compile:

NODE_ENV=development browserify -t envify -t uglifyify index.js -o dev.js &&
NODE_ENV=production browserify -t envify -t uglifyify index.js -o prod.js

It should go without saying that you should be hesitant using environment variables in a Browserify module - this is best suited to your own applications or modules built with Browserify's --standalone tag.

File Extensions

Sometimes, you don't want uglifyify to minify all of your files – for example, if you're using a transform to require CSS or HTML, you might get an error as uglify expects JavaScript and will throw if it can't parse what it's given.

This is done using the -x or --exts transform options, e.g. from the command-line:

browserify     \
  -t coffeeify \
  -t [ uglifyify -x .js -x .coffee ]

The above example will only minify .js and .coffee files, ignoring the rest.

Global Transforms

You might also want to take advantage of uglifyify's pre-bundle minification to produce slightly leaner files across your entire browserify bundle. By default, transforms only alter your application code, but you can use global transforms to minify module code too. From your terminal:

browserify -g uglifyify ./index.js > bundle.js

Or programatically:

var browserify = require('browserify')
var fs = require('fs')

var bundler = browserify(__dirname + '/index.js')

bundler.transform('uglifyify', { global: true  })

bundler.bundle()
  .pipe(fs.createWriteStream(__dirname + '/bundle.js'))

Note that this is fine for uglifyify as it shouldn't modify the behavior of your code unexpectedly, but transforms such as envify should almost always stay local – otherwise you'll run into unexpected side-effects within modules that weren't expecting to be modified as such.

Ignoring Files

Sometimes uglifyjs will break specific files under specific settings – it's rare, but does happen – and to work around that, you can use the ignore option. Given one or more glob patterns, you can filter out specific files this way:

browserify -g [ uglifyify --ignore '**/node_modules/weakmap/*' ] ./index.js
var bundler = browserify('index.js')

bundler.transform('uglifyify', {
  global: true,
  ignore: [
      '**/node_modules/weakmap/*'
    , '**/node_modules/async/*'
  ]
})

bundler.bundle().pipe(process.stdout)

Source Maps

Uglifyify supports source maps, so you can minify your code and still see the original source – this works especially well with a tool such as exorcist when creating production builds.

Source maps are enabled when:

  • You're using another transform, such as coffeeify, that inlines source maps.
  • You've passed the --debug flag (or debug option) to your browserify bundle.

Enabling --debug with browserify is easy:

browserify -t uglifyify --debug index.js
var bundler = browserify({ debug: true })

bundler
  .add('index.js')
  .transform('uglifyify')
  .bundle()
  .pipe(process.stdout)

If you'd prefer them not to be included regardless, you can opt out using the sourcemap option:

browserify -t [ uglifyify --no-sourcemap ] app.js
var bundler = browserify('index.js')

bundler.transform('uglifyify', { sourceMap: false })
  .bundle()
  .pipe(process.stdout)

uglifyify's People

Contributors

al6x avatar bendrucker avatar bpmccurdy avatar casr avatar garthenweb avatar go-oleg avatar goto-bus-stop avatar hughsk avatar jdcl32 avatar jgillich avatar jkimbo avatar jmm avatar kenany avatar kristoferjoseph avatar lrlna avatar martinheidegger avatar nowells avatar parshap avatar toddself avatar weilu avatar yoshuawuyts avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

uglifyify's Issues

Add better tests

There were some breaking changes in 4.x that don't seem to be covered.
How about adding tests for all the options using the command line AND/OR node.

This way it's easier to find potential breaking changes in future versions.

Missing command line entry

Hi, I come up with following error using this module in command line:

➜  ~ npm install uglifyify -g
Downloading uglifyify to /Users/ewind/.nvm/versions/node/v8.3.0/lib/node_modules/uglifyify_tmp
Copying /Users/ewind/.nvm/versions/node/v8.3.0/lib/node_modules/uglifyify_tmp/[email protected]@uglifyify to /Users/ewind/.nvm/versions/node/v8.3.0/lib/node_modules/uglifyify
Installing uglifyify's dependencies to /Users/ewind/.nvm/versions/node/v8.3.0/lib/node_modules/uglifyify/node_modules
[1/5] extend@^1.2.1 installed at node_modules/[email protected]@extend
[2/5] through@~2.3.4 installed at node_modules/[email protected]@through
[3/5] convert-source-map@~1.1.0 installed at node_modules/[email protected]@convert-source-map
[4/5] minimatch@^3.0.2 installed at node_modules/[email protected]@minimatch
[5/5] uglify-es@^3.0.15 installed at node_modules/[email protected]@uglify-es
All packages installed (10 packages installed from npm registry, used 1s, speed 360.98kB/s, json 10(19.72kB), tarball 393.24kB)
➜  ~ uglifyjs
zsh: command not found: uglifyjs
➜  ~ uglify  
zsh: command not found: uglify
➜  ~ uglifyify
zsh: command not found: uglifyify

Environment: macOS 10.13 / Node V8.3.0. Is that something I'm missing?

Inlined sourcemaps

I created small example of using this transform https://github.com/mrDinckleman/uglifyify-sourcemap
I used only 'uglifyify' transform with sourcemaps, and visualizing shows this:

var hash={foo:require("./foo"),bar:require("./bar")};hash.foo("app"),hash.bar("app");

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC5qcyJdLCJuYW1lcyI6WyJoYXNoIiwiZm9

Bundle sourcemaps loosing information about source code, but shows inlined sorcemaps. Is it normal or I am doing something wrong?

Seems to support some ES6 features and not others?

So, I have no problem using arrow functions, const, and other ES6 features with uglifyify. However, I cannot use let at all. It produces a JS_Parse_Error on compilation.

Here's an example.

App.js:

let thisIsATest = true

CL:

uglifyify src/app.js -o build/app.js

Error returned:

Error
at new JS_Parse_Error (eval at <anonymous> (/node_modules/uglify-js/tools/node.js:22:1), <anonymous>:1526:18)

I really like this tool, but also need to be able to write in ES6. Cheers.

(v4) How to use "extensions" (-x, --exts) with node

There is no example that shows how to use the file extensions option with node.

I am trying to exclude css files. Since the "ignore" options seems to be broken ( #73 ) I tried using this option instead.

Both options don't seem to work as expected with version 4

Errors caused by config

b.transform('uglifyify', {
  extensions: ['.js'],
  global: true
})

Error extensions is not a supported option

Errors caused by CSS files

b.transform('uglifyify', {
  x: ['.js'],
  global: true
})

Error Unexpected token: punc (.)

b.transform('uglifyify', {
  exts: ['.js'],
  global: true
})

Error Unexpected token: punc (.)

b.transform('uglifyify', {
  exts: ['js'],
  global: true
})

Error Unexpected token: punc (.)

Pass "--comments" option to uglifyJS

I want to minify, but preserve license comments.
I have got this inside my scripts in my package.json

"build-js-light-prod": "browserify -g [ uglifyify --comments ] private/js/main-template-light.js -o public/js/main-light.js",

Then I started this with
npm run build-js-light-prod

My comment looks like this and it is placed at the beginning of the file.

/**
 *  @license
 *  This file is licensed to you under the Apache License,
 *  Version 2.0 (the "License"); you may not use this file except in
 *  compliance with the License. You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

The Problem I have ist that, my js is only minified and my comment isn't there anymore.
What am I doing wrong?

beautify breaks

events.js:163
      throw er; // Unhandled 'error' event
      ^
SyntaxError: Unexpected token: name (output) while parsing file: /isomorphic-url/src/browser.js
    at JS_Parse_Error.get (eval at <anonymous> (/isomorphic-url/node_modules/uglify-js/tools/node.js:28:1), <anonymous>:86:23)

Add CHANGELOG.md

There are so many tools out there to generate a changelog. (I usually use conventional changelog with standard-version).

I ran into several issues with the 4.x upgrade. Sadly there are no features or breaking changes listed.

How would you feel about adding this to the architecture? It would really help other developers.

SyntaxError: Unexpected token when trying to uglifyify this file (bootstrap-select)

I apologize in advance for the potentially silly question. I'm trying to uglify this as part of a bundle, however this ONE file does not seem to want to play nice.

To simplify recreating this issue, I have copied the exact code I'm using for bootstrap-select. It won't even uglifyify by itself!

https://gist.github.com/alexander-daniel/d527e8be5f5a3ec5eb15

If you try to run the command browserify -t uglifyify bootstrap-select.js -o select.js on this file, it outputs SyntaxError: Unexpected token when trying to uglifyify this file

Using "browserify": "^11.2.0", "uglifyify": "^3.0.1"

Any help would be appreciated! Thanks for the awesome browserify plugin, it's been a dream to use except for this minor hiccup!

Cheers!

Uglifyify not uglifying on React

I'm running the following command:
NODE_ENV=production browserify -t envify -t uglifyify src/main.js -o build/main.min.js

My main.js looks like this:
var React = require('react');

The output file however is not minified at all, all commands are still in there etc.

Any thoughts?

Move to Uglify2

Uglify is now deprecated in favor of Uglify2. From https://github.com/mishoo/UglifyJS

I started working on UglifyJS’s successor, version 2. It’s almost a full rewrite (except for the parser which is heavily modified, everything else starts from scratch). I’ve detailed my reasons in the README, see the project page.
https://github.com/mishoo/UglifyJS2
Version 1 will continue to be maintained for fixing show-stopper bugs, but no new features should be expected.

Setting uglifyJS options

How can one send options to uglify js with this transform?

Such as:

{
    mangle: true,
    compress: {
        sequences: true,
        dead_code: true,
        conditionals: true,
        booleans: true,
        unused: true,
        if_return: true,
        join_vars: true,
        drop_console: true
}

Non-dead code removed

Not sure if this is an uglifyify problem or an uglify problem, but we're seeing cases where non-dead code is dropped. Consider the following:

var result
var useX = //some code here;
if(useX) {
  result = require('./someotherModuleX');
} 
else {
 result = require('./someotherModuleY');
}
module.exports = result;

When we run this through uglifyify, both someOtherModuleX and someOtherModuleY are removed.

However, this works:

var useX = //some code here;
if(useX) {
  module.exports = require('./someotherModuleX');
} 
else {
 module.exports = require('./someotherModuleY');
}

A sample app is here:

https://github.com/raybooysen/uglifyifyExample

different output file size

Is there anything I'm doing wrong?

The output from below is 343K

browserify -t [ babelify --presets [ es2015 react ] ]  src/index.js \
-g [ envify --NODE_ENV production ] \
-g uglifyify -p bundle-collapser/plugin \
| uglifyjs -cm > public/build/app.js

is smaller than the one below is439K
build.js

var browserify = require('browserify')
var envify = require('envify/custom')

browserify('src/index.js')
  .transform('babelify', {presets: ['es2015', 'react']})
  .transform(envify({NODE_ENV: 'production'}))
  .transform({
    global: true,
    mangle: true,
    sourcemap: false,
    compress: {
      sequences: true,
      dead_code: true,
      booleans: true
    }
  }, 'uglifyify')
  .plugin(require('bundle-collapser/plugin'))
  .bundle()
  .pipe(process.stdout)

then node build.js | uglifyjs -cm > public/build/app.js

Source map: source paths are not always relative

I use uglifyify with babelify. I do:

browserify src.js -o out.js -t [ babelify --presets=babel-preset-es2015 ] -t uglifyify -d

In the result source map, there is:

{
  "version": 3,
  "sources": [
    "../../../usr/lib/node_modules/browserify/node_modules/browser-pack/_prelude.js", 
    "/home/usr/prj/src.js", 
    "/home/usr/prj/utils.js"
  ],
  "names": [], 
  "mappings": "...", 
  "file": "generated.js", 
  "sourceRoot": "", 
  "sourcesContent": [ "...", "...", "..."]
}

As you can see, Browserify file path is relative but my project paths are absolute.

I don't want to disclose my file system paths. Could you fix this?

per-file uglify options

I'm using ignore to allow es6-weak-map to work, but I'd like to at least strip white space to get it as small as possible without breaking it.

Is there a way to pass uglify options based on a glob pattern?

Fatal error: `ignore` is not a supported option while parsing file:

[email protected]

the docs have this:

bundler.transform('uglifyify', {
  global: true,
  ignore: [
      '**/node_modules/weakmap/*'
    , '**/node_modules/async/*'
  ]
})

but if you do this you get:

Fatal error: `ignore` is not a supported option while parsing file: xyz.js while parsing file: xyz.js

either i'm doing something else wrong, or this is a blocking regression.

--ignore flag being ignored in Jenkins environment

Using 3.0.2,

I am running:

./node_modules/.bin/browserify                                                  \
    --exclude crypto                                                            \
    --exclude util                                                              \
    --transform folderify                                                       \
    --entry ./node_modules/*****-*****-sdk/build/index.js                   \
    --entry ./node_modules/*****-*****-app/build/index.js                   \
    --outfile resources/*****-modules.js                                    \
    --ignore ./node_modules/*****-*****/build/lib/*****.js   \
    --ignore ./node_modules/*****-*****-sdk/build/lib/*****js      \
    --global-transform [ uglifyify --ignore '**/node_modules/*****-*****/**' --ignore '**/node_modules/*****-*****/**' ]

in a Jenkins pipeline environment.

The two paths I want ignored are not actually getting ignored. If I run the same command locally through terminal, it actually does ignore the two paths. Does anyone know what could be the issue? Could it possibly be a bash issue? Jenkins? Shell?

uglifyify is dropping a file

index.js:

require("babel-core/lib/generation")

browserify.js:

var gulp = require("gulp");

var browserify = require("browserify");
var source = require('vinyl-source-stream');
var gulp = require("gulp");


    var bundle = browserify({
        entries: ["./index.js"],
        debug: true,
        cache: {},
        packageCache: {},
        fullPaths: true
    })

   // If I comment out uglifyif then it works again.
    bundle = bundle.transform('uglifyify', { global: true });

    return bundle.bundle()
                 .pipe(source("main.bundle.js"))
                 .pipe(gulp.dest("./assets"));

Running node browserify.js breaks because node_modules/babel-core/node_modules/source-map/lib/base64-vlq.js disappears.

Can't catch errors when used as a global transform programatically

Started playing with this as a global transform. It works well, but I haven't found a way to catch errors as I would expect. For example:

var browserify = require('browserify');
var uglifyify = require('uglifyify');

var file = './test.js';

var errorHandler = function (error) {
  console.error("couldn't browserify: " + file);
  console.error(error.stack);
};

var b = browserify({basedir: 'js'});

// catch file system errors, such as test.js being unreadable
b.on('error', errorHandler);

b.add('./' + file);

// apply uglifyify transform
// TODO - handle errors?
b.transform({global: true}, 'uglifyify');

var bundle = b.bundle();

// catch errors in bundling
bundle.on('error', errorHandler);

bundle.pipe(/* some stream */);

If test.js has invalid JS, the transform will still run but causes a fatal error. If the transform is removed, the error handler on bundle catches the invalid JS.

Any ideas?

don't queue extra newlines to help with deterministic builds

When building kinto.js (npm install --dev && npm run-dist), empty lines are inserted in kinto.min.js.
Command:

$ browserify --ignore process -s Kinto -g uglifyify -e src/index.js -o dist/kinto.min.js -t [ babelify --sourceMapRelative . ]

When I run the command twice, I get empty lines in different parts of the file, which produces a different checksum.

When I comment-out this.queue('\n') - line 86 of index.js, I still get valid files (only no empty lines) and they are the same when I repeat the command.

Are those newlines really necessary? If not, I'd rather not have them.
Thanks,

Use with babelify transform

Hello,

I'm trying to run uglifyify with babelify and get source maps, not sure what I'm doing wrong.

Here's what I'm running:

browserify \
     -t [ babelify --presets [ es2015 react ] ]  \
     -g uglifyify index.js > bundle.js

I'm pretty sure you need to pass -d to browserify to get source maps, but when I do that my output isn't minified.

browserify -d \
     -t [ babelify --presets [ es2015 react ] ]  \
     -g uglifyify index.js > bundle.js

Source maps and minification work with minifyify, but I'm seeing better compression if I run uglify.

This works:

browserify -d \
     -t [ babelify --presets [ es2015 react ] ] \
     -p [minifyify --map bundle.map.json --output bundle.map.json] index.js > bundle.js

Any help would be appreciated.

Sourcemap URL always added?

This seems to always inject

//# sourceMappingURL=out.js.map

no matter what I do, but it does appear to pass sourcemap info to Browserify. Any way I can avoid adding that? I don't really care for dev code, but when I build for production, I'd like to avoid it. Happy to help with a patch if you point me in the right direction, but I don't really know uglify's APIs at all.

README.md sourcemap option example

In the source map example I think you have a mistake, sourcemap is passed as false

var bundler = browserify({ debug: true })

bundler
  .add('index.js')
  .transform({ sourcemap: false }, 'uglifyify')
  .bundle()
  .pipe(process.stdout)

Shouldn't it look like this?

var bundler = browserify({ debug: true })

bundler
  .add('index.js')
  .transform('uglifyify')
  .bundle()
  .pipe(process.stdout)

cli options when run from API

Hey,

b.transform({minify: true}, 'uglifyify')

but I don't think it's minifying (there are still comments left in, for one thing).

I see a ton of examples with CLI, but what about calling from inside of node ( like a gulp task with watchify )

Is my syntax wrong?

Different sized bundles on repeated build

I have noticed with this transform I am not getting deterministic builds.

Minimal test case below. When you run npm test it will just repeat the exact same Browserify bundle step but it will give you different size bundles.

package.json

{
  "private": true,
  "dependencies": {
    "browserify": "^14.1.0",
    "react": "^15.4.2",
    "react-dom": "^15.4.2",
    "uglifyify": "^3.0.4"
  },
  "scripts": {
    "test": "for i in 0 1 2 3 4 5 6 7 8 9; do echo \"require('react-dom')\" | browserify - -g uglifyify | wc -c; done"
  }
}

Shell:

npm install && npm test

My output:

> @ test /Users/casr/Source/scratch/uglifyify-test
> for i in 0 1 2 3 4 5 6 7 8 9; do echo "require('react-dom')" | browserify - -g uglifyify | wc -c; done

  319901
  319901
  320050
  319926
  319366
  319777
  319777
  319777
  319777
  319926

I have also uploaded this as a gist at https://gist.github.com/casr/664cf9a2011b940436e1c59c2716f6d5 if you want want to clone it from there.

WARN: Couldn't figure out mapping for ?:3,234 - 1,327 []

Basically using the latest version throws a ton of these warnings, I haven't been able to zero in on exactly why its having difficult with sourcemaps. I am using browserify, babelify and rollupify as well and uglifyify was the last in the sequence of transforms, in practice it does seem to locate the sourcemaps correctly (so far), but its really outputting thousands of warnings.

Update dependencies

It would be neat if uglifyify could update its dependencies, especially on uglify-js itself.

The current version of uglify is in the 2.x range, uglifyify still depends on a 1.x version.

As the change from 1.x to 2.x may break other projects using uglifyify, I'd recommend reflecting this in the version number.

Cannot find module 'uglifyify' from ...

I installed browserify and uglifyify but the moment I mention uglifyify on command line I get an error.

C:\test\test-require>browserify -t uglifyify --debug compress.js
Error: Cannot find module 'uglifyify' from 'C:\test\test-require'
at C:\Users\test-user\AppData\Roaming\npm\node_modules\browserify\node_modules\resolve\lib\async.js:46:17
at process (C:\Users\test-user\AppData\Roaming\npm\node_modules\browserify\node_modules\resolve\lib\async.js:173:43)
at ondir (C:\Users\test-user\AppData\Roaming\npm\node_modules\browserify\node_modules\resolve\lib\async.js:188:17)
at load (C:\Users\test-user\AppData\Roaming\npm\node_modules\browserify\node_modules\resolve\lib\async.js:69:43)
at onex (C:\Users\test-user\AppData\Roaming\npm\node_modules\browserify\node_modules\resolve\lib\async.js:92:31)
at C:\Users\test-user\AppData\Roaming\npm\node_modules\browserify\node_modules\resolve\lib\async.js:22:47
at FSReqWrap.oncomplete (fs.js:82:15)

compress.js is a simple dummy js file that require's another simple dummy js file.

(v4) `ignore` is not a supported option

With the update to 4.0.2 (from 3.0.4) the ignore option stopped working.

errorify: `ignore` is not a supported option

It is still documented in the readme. I guess the switch to uglify-es caused this. I'm not sure how to ignore CSS files that are transpiled with css-modules

Switching from 3.0.4 to 4.0.0 results in TypeError: Cannot read property 'replace' of undefined while parsing file

Actual command I use:

browserify -g [ babelify --presets [ react es2015 ] ] -g [ envify --NODE_ENV production ] -g [ uglifyify -c ] ./src/gui.jsx -o ./build/js/gui.js --extension=.jsx

It succeeds with uglifyify version 3.0.4 and fails with version 4.0.0 as follows:

TypeError: Cannot read property 'replace' of undefined while parsing file: src/gui.jsx
    at Stream.ready (node_modules/uglifyify/index.js:78:24)
    at Stream.<anonymous> (node_modules/uglifyify/index.js:100:12)
    at _end (node_modules/through/index.js:65:9)
    at Stream.stream.end (node_modules/through/index.js:74:5)
    at DestroyableTransform.onend (node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js:499:10)
    at Object.onceWrapper (events.js:314:30)
    at emitNone (events.js:110:20)
    at DestroyableTransform.emit (events.js:207:7)
    at endReadableNT (node_modules/readable-stream/lib/_stream_readable.js:920:12)
    at _combinedTickCallback (internal/process/next_tick.js:102:11)
"devDependencies": {
    "babel-cli": "6.24.1",
    "babel-preset-es2015": "6.24.1",
    "babel-preset-react": "6.24.1",
    "babelify": "7.3.0",
    "browserify": "14.4.0",
    "envify": "4.0.0",
    "uglifyify": "4.0.0",
    "watchify": "3.9.0"
  }

Furthermore, removing uglifyify from the toolchain also succeeds, so that the dependencies listed above succeed using this command:

browserify -g [ babelify --presets [ react es2015 ] ] -g [ envify --NODE_ENV production ] ./src/gui.jsx -o ./build/js/gui.js --extension=.jsx

Add option to always enable source-maps

I'm using uglifyify even in development for the dead code elimination. I'm defining constants that are always true or always false on the client so I can do things like:

if (IS_SERVER) {
  // do logic that only happens on the server
}

I can't seem to make uglifyify generate source maps unless the input already has a source map. In my case, the input is just pure JavaScript. Could we add an option to include source map comments?

Dependencies in package.json ignored

For some reason, my dependencies listed in package.json are not being minified:

"dependencies": {
    "backbone": "~1.1.2",
    "fastclick": "~1.0.3",
    "jquery": "~2.1.0"
  },

Everything else is being minified correctly. Greatly appreciate any help. Let me know what other info you need.

Uglifyify does not minify node.js' built-in modules

For example, when you require("events") in your input file, along with some other modules, everything except the events module is minified.
Coudl it be that browserify doesn't pass built-in modules to transforms?

Global flag is ignored

The -g flag has no effect. I think it was removed in browserify, and currently aliases to just installing a transform on each file.

Might be worth removing mention of it from the readme.

Specify options to "compress"?

Hello,

Thanks for writing up this lib, very helpful!

I was wondering if there was a way to specify complex options to "compress", along the lines of:

-g [uglifyify --compress {drop_console:true, unused:true} --mangle --screw-ie8]

or

-g [uglifyify --compress 'drop_console,unused' --mangle --screw-ie8]

Both those examples fail for me.

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.