Socket
Socket
Sign inDemoInstall

ngmin

Package Overview
Dependencies
3
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    ngmin

AngularJS Minifier


Version published
Weekly downloads
6.4K
increased by2.16%
Maintainers
1
Install size
1.32 MB
Created
Weekly downloads
 

Readme

Source

ngmin

Build Status

ngmin is an AngularJS application pre-minifier. The goal is ultimately to use this alongside yeoman and grunt to make developing and building Angular apps fast, easy, and fun.

tl;dr

Turns this

angular.module('whatever').controller('MyCtrl', function ($scope, $http) { ... });

into

angular.module('whatever').controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { ... }]);

so that minifiers can handle AngularJS's DI annotations and you can save a few keystrokes.

Installation

Install via npm:

npm install -g ngmin

Grunt Task

ngmin is available as a Grunt task as grunt-ngmin.

CLI Usage

Ideally, you should concat all of your files, then run ngmin once on the concatenated file.

ngmin somefile.js somefile.annotate.js

From here, the annotated file(s) to a minifier.

Conventions

ngmin does not currently attempt to be fully generalized, and might not work if you're too clever. If you follow these conventions, which are the same as what the AngularJS Yeoman generator defaults, you should be fine.

Module Declaration

// like this
angular.module('myModuleName', ['dependOnThisModule']);

Controller Declaration

// like this
angular.module('myModuleName').controller('MyCtrl', function ($scope) {
  // ...
});

Service Declaration

This should work for all injectable APIs.

// like this
angular.module('myModuleName').service('myService', function ($scope) {
  // ...
});

Chaining

You can methods like this, and ngmin should still work fine:

// like this
angular.module('myModuleName').
  service('myFirstService', function ($scope) {
    // ...
  }).
  service('mySecondService', function ($scope) {
    // ...
  });

This works with all injectable APIs.

References

This is not the preferred way of dealing with modules, and thus support for it isn't completely comprehensive. Something like this will work:

var myMod = angular.module('myMod', []);
myMod.service('myService', function ($scope) {
  // ...
});

But something like this will probably fail spectacularly:

var myMod = angular.module('myMod', []);
var mod1, mod2, mod3;
mod1 = myMod;
mod3 = (function () {
  return mod2 = mod1;
}());
mod3.service('myService', function ($scope) {
  // ...
});

Please don't write code like the second example. :)

Conceptual Overview

AngularJS's DI system inspects function parameters to determine what to inject:

// angular knows to inject "myService" based on the parameter in "myFactory"
someModule.factory('myFactory', function (myService) {
  // ...
});

AngularJS does this for Module#controller, Module#service, Module#factory, etc. Check out the developer guide on DI for more info.

JavaScript minifiers rename function parameters. The code above, when minified, might look like this:

// the "myService" parameter has been renamed to "a" to save precious bytes
someModule.factory('myFactory', function (a) {
  // ...
});

To overcome this, AngularJS has a "minifier-safe inline" notation (see Inline Annotation in the docs) that annotates angular.controller, angular.service, angular.factory with an array of dependencies' names as strings:

// angular knows to inject "myService" based on the parameter in "myFactory"
someModule.factory('myFactory', ['myService', function (myService) {
  // ...
}]);

So with this notation, when minified, still includes the correct dependency names even if the function arguments are re-written:

someModule.factory('myFactory', ['myService', function (a) {
  // minified variable "a" will represent "myService"
  // ...
}]);

Writing the "minifier-safe" version by hand is kind of annoying because you have to keep both the array of dependency names and function parameters in sync.

Keywords

FAQs

Last updated on 26 Mar 2013

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc