gulp-ng-constant
Information
Package | gulp-ng-constant |
Description | Plugin for dynamic generation of angular constant modules. Based of grunt-ng-constant |
Node Version | >= 0.10 |
Index
Usage
gulpfile.js
Configuration in gulpfile.js
var ngConstant = require('gulp-ng-constant');
gulp.task('config', function () {
gulp.src('app/config.json')
.pipe(ngConstant({
name: 'my.module.config',
deps: ['ngAnimate'],
constants: { myPropCnt: 'hola!' },
wrap: 'amd',
}))
// Writes config.js to dist/ folder
.pipe(gulp.dest('dist'));
});
app/config.json
{
"myFirstCnt": true,
"mySecondCnt": { "hello": "world" }
}
dist/config.js (output)
define(["require", "exports"], function(require, exports) {
return angular.module("my.module.config", ["ngAnimate"])
.constant("myFirstCnt", true)
.constant("mySecondCnt", { "hello": "world" })
.constant("myPropCnt", "hola!");
});
config.json
Configuration in gulpfile.js
var ngConstant = require('gulp-ng-constant');
gulp.task('config', function () {
gulp.src('app/config.json')
.pipe(ngConstant())
// Writes config.js to dist/ folder
.pipe(gulp.dest('dist'));
});
app/config.json
{
"name": "my.module.config",
"deps": ["ngAnimate"],
"wrap": "commonjs",
"constants": {
"myFirstCnt": true,
"mySecondCnt": { "hello": "world" }
}
}
dist/config.js (output)
module.exports = angular.module("my.module.config", ["ngAnimate"])
.constant("myFirstCnt", true)
.constant("mySecondCnt", { "hello": "world" })
.constant("myPropCnt", "hola!");
Options
options.name
Type: string
Default: filename
or "ngConstants"
Overrides: json.name
optional
The module name.
This property will override any name
property defined in the input json
file. The default name when used as a transform stream (i.e. regular plugin) is the passed file name. When options.stream is true
the default name is "ngConstants"
.
options.stream
Type: boolean
Default: false
optional
If true it returns a new gulp stream, which can then be piped other gulp plugins (Example).
options.constants
Type: Object | string
Default: undefined
Extends/Overrides: json.constants
Constants to defined in the module.
Can be a JSON
string or an Object
.
This property extends the one defined in the input json
file. If there are
properties with the same name, this properties will override the ones from the
input json
file.
options.merge
Type: boolean
Default: false
optional
This applies to constants of the Object type. If true the constants of type Object from the input file and the constants from the configuration will be merged.
options.deps
Type: array<string>|boolean
Default: []
Overrides: json.deps
optional
An array that specifies the default dependencies a module should have. To add the constants to an existing module, you can set it to false
.
This property will override any deps
property defined in the input json
file.
options.wrap
Type: boolean|string
Default: 'es6'
Available: [false, 'amd', 'commonjs', 'es6']
optional
A boolean to active or deactive the automatic wrapping.
A string who will wrap the result of file, use the
<%= __ngModule %>
variable to indicate where to put the generated
module content.
A string with 'amd' that wraps the module as an AMD module,
compatible with RequireJS
options.wrapHeader
Type: string
Default: null
optional
A string that is prepended to the wrapper.
options.wrapFooter
Type: string
Default: null
optional
A string that is appended to the wrapper.
options.space
Type: string
Default: null
optional
A string that defines how the JSON.stringify method will prettify your code, e.g. '\t'
, ' '
options.template
Type: string
Default: content of tpls/constant.tpl.ejs
optional
EJS template to apply when creating the output configuration file. The following variables are passed to the template during render:
moduleName
: the module name (string
)deps
: the module dependencies (array<string>
)constants
: the module constants (array<contantObj>
)- where a
constantObj
is an object with aname
and avalue
, bothstrings
.
- where a
options.templatePath
Type: string
Default: 'tpls/constant.tpl.ejs'
optional
Location of a custom template file for creating the output configuration file. Defaults to the provided constants template file if none provided.
options.indent
Type: string
Default: ''
(empty string)
optional
A string that is used to indent the .constant()
lines in the generated file. Useful only for
formatting the output file.
Examples
Multiple Environments
config.json
{
"development": { "greeting": "Sup!" },
"production": { "greeting": "Hello" }
}
gulpfile.js
var gulp = require('gulp');
var ngConstant = require('gulp-ng-constant');
gulp.task('constants', function () {
var myConfig = require('./config.json');
var envConfig = myConfig[process.env];
return ngConstant({
constants: envConfig,
stream: true
})
.pipe(gulp.dest('dist'));
});
Stream
var gulp = require('gulp');
var ngConstant = require('gulp-ng-constant');
var uglify = require('gulp-uglify');
gulp.task('constants', function () {
var constants = { hello: 'world' };
return ngConstant({
constants: constants,
stream: true
})
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
YAML
Just write your configuration in a YAML file and pipe it to the plugin.
config.yml
greeting: Merry Christmas!
seasons:
- Winter
- Spring
- Summer
- Fall
gulpfile.js
var gulp = require('gulp');
var ngConstant = require('gulp-ng-constant');
gulp.task('constants', function () {
gulp.src('app/config.yml')
.pipe(ngConstant())
.pipe(gulp.dest('dist'));
});
ECMAScript 2015 (ES6)
envs.json
{
"development": {
"ENV": {
"KEY": "secret",
"API_URL": "http://localhost/"
}
},
"production": {
"ENV": {
"KEY": "superSecret",
"API_URL": "http://example.com/"
}
}
}
gulpfile.babel.js
import gulp from 'gulp';
import rename from 'gulp-rename';
import ngConstant from 'gulp-ng-constant';
gulp.task('constants', function () {
var myConfig = require('./envs.json');
var envConfig = myConfig[process.env];
return ngConstant({
name: "app.env",
constants: envConfig,
stream: true,
wrap: "es6"
})
.pipe(rename('env.js'))
.pipe(gulp.dest('dist'));
});
app.js
'use strict';
import angular from 'angular';
import env from 'env';
let app = angular.module('app', [env.name])
.factory('someRepository', function($http, ENV) {
//Just to illustrate
$http.get(ENV.API_URL);
});
export default app;
Special Thanks
@alexeygolev, @sabudaye, @ojacquemart, @lukehorvat, @rimian, @andidev, @dotDeeka, @LoicMahieu, @vladimirgamalian