npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grunt-shared-config

v0.3.17

Published

Create config files for SASS/SCSS/LESS/Stylus and JS from one source

Downloads

26

Readme

grunt-shared-config

Build Status Downloads Version

Create config files for CSS preprocessors (SASS/SCSS/LESS/Stylus) and JS/JSON from one source

Getting Started

This plugin requires Grunt ~0.4.0

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-shared-config --save-dev

One the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks( "grunt-shared-config" );

The "shared_config" task

Overview

This task helps you to create multiple config files in SCSS/SASS/LESS/Stylus/JS/JSON/JS (AMD flavored).

Options

options.cssFormat

Type: String Default value: "dash"

One of four possible types: "dash", "underscore", "camelcase", "uppercase" defining the format in which variables are written.

$animation-speed: 2s;   // dash
$animation_speed: 2s;   // underscore
$ANIMATION_SPEED: 2s;   // uppercase
$animationSpeed: 2s;    // camelcase

options.jsFormat

Type: String Default value: "uppercase"

Same as options.cssFormat but for js/json files.

options.amd

Type: Boolean Default value: false

Defines whether or not JS files are written in AMD style or as plain objects.

options.ngconstant

Type: Boolean Default value: false

Defines whether or not JS files are written in Angular constant module style or as plain objects. Note: Can not be used with AMD.

options.module

Type: String Default value: "globalConfig.sharedConfig"

This string determines the name of the Angulare constant module.

options.newModule

Type: Boolean Default value: true

Defines whether or not created angular module should be new.

true:

	angular.module("globalConfig.sharedConfig", [])

false:

	angular.module("globalConfig.sharedConfig")

options.name

Type: String Default value: options

This value is only relevant if options.amd is set to false. This String determines the name of the config object (for JavaScript and JSON).

options.namespace

Type: String Default value: ""

This value will be prepended to the name for all SCSS, SASS, LESS variables. This allows some sort of name spacing. As an example, a variable name foo with the value "120px", with the namespace set to "myvars-" will be defined in SCSS as $myvars-foo: 120px.

options.useSassMaps

Type: Boolean Default value: false

If this is set to true for every SCSS file it will generate a Sass Map file instead.

options.indention

Type: String Default value: \t

This is used for indention. Defaults to tab, pass spaces if you prefer that.

options.mask

Type: Object or String or Array Default: undefined

If mask is an object, this is used to mask the config object before output. If mask is a string and a file exists at this path (either JSON or YAML), this is read in and used to mask the config object before output. If mask is an array, the array items are treated one after the other like if it would be a single value (string or object) by overwriting the former already existing mask.

A mask is an object (if from file, read as JSON or YAML) that includes key value pairs like this: key: true includes this value including any nested objects key: false don't include this key: allowLevel-1 include the first level in the result, any nested objects will not end up in the result. You can use allowLevel-2 and so on, to define the number of levels to include.

Of course you can nest these key value pairs to have granular control over what ends up in the output.

options.maskAllowUnknownLevels

Type: Number Default: 0

Defines how many levels within the config file will be allowed if the value is not set in the mask. Setting it to 1 for instance means that every value 1 level deeply nested in the config will be accepted, if not specified in the config. By default the value will be 0. that means values that are not defined in the mask file will be ignored.

options.singlequote

Type: Boolean Default false

If true, determines that single quotes (') should be used in the JavaScript objects otherwise double quotes (") are used.

Options (Files)

src

Type: String or Array

Contains a single config file (JSON or YAML) or an array of files. The config file may contains nested values. Files ending with .yml or .yaml are parsed as YAML, all others as JSON.

dest

Type: String or Array

Contains all output files. Format is detected by file extension. Available extension: .js, .json, .sass, .scss, .styl, .less

files

Type: Array

This array can be used as a substitution for src and dest to allow multi-processing per task.

Usage Examples

grunt-shared-config requires a JSON or YAML file to generate the config files from. The JSON file must supply all variable in hyphon format. For the following examples let's assume we supply this config.json.

{
	"height": "120px",
	"width": "500px",
	"amount": "33%",
	"animation-speed": "100s",
	"color": "#BEBEBE",
	"labeled-color": "red",
	"transform": "rotateY(0deg) translateZ(288px)",
	"car": {
		"blue": "#0000FF",
		"green": "#00FF00"
	},
	"some-text": "'some text content'",
	"path": "some/path/to/some/file.png"
}

NOTE: While converting the variables for JS/JSON, it strips all units (such as px, %, etc.) and also converts percenteges from 33% to 0.33. NOTE: Value that must be exported as String must start and end with '.

AMD and SCSS files.

The following task creates an AMD based JavaScript file and all available CSS preprocessor format files.

grunt.initConfig( {
	shared_config: {
		default: {
			options: {
				name: "globalConfig",
				cssFormat: "dash",
				jsFormat: "uppercase",
				amd: true
			},
			src: "config.json",
			dest: [
				"styles/config.scss",
				"styles/config.sass",
				"styles/config.less",
				"styles/config.styl",
				"scripts/config.js"
			]
		},
	}
} )

scripts/config.js

define( function() {

	return {
		"HEIGHT": 120,
		"WIDTH": 500,
		"AMOUNT": 0.33,
		"ANIMATION_SPEED": 100,
		"COLOR": "#BEBEBE",
		"LABELED_COLOR": "red",
		"TRANSFORM": "rotateY(0deg) translateZ(288px)",
		"CAR": {
			"BLUE": "#0000FF",
			"GREEN": "#00FF00"
		}
        "SOME_TEXT": "some text content"
        "PATH": "some/path/to/some/file.png"
	}

} );

styles/config.scss

$height: 120px;
$width: 500px;
$amount: 33%;
$animation-speed: 100s;
$color: #BEBEBE;
$labeled-color: red;
$transform: rotateY(0deg) translateZ(288px);
$car-blue: #0000FF;
$car-green: #00FF00;
$some-text: "some text content"
$path: "some/path/to/some/file.png"

Angular constant module and SCSS files.

The following task creates an Angular constant module based JavaScript file and all available CSS preprocessor format files. The module name will be options.name suffixed with .sharedConfig.

grunt.initConfig( {
	shared_config: {
		default: {
			options: {
				name: "globalConfig",
				cssFormat: "dash",
				jsFormat: "uppercase",
				ngconstant: true
			},
			src: "config.json",
			dest: [
				"styles/config.scss",
				"styles/config.sass",
				"styles/config.less",
				"styles/config.styl",
				"scripts/config.js"
			]
		},
	}
} )

scripts/config.js

angular.module("globalConfig.sharedConfig", [])
	.constant("globalConfig", {

	return {
		"HEIGHT": 120,
		"WIDTH": 500,
		"AMOUNT": 0.33,
		"ANIMATION_SPEED": 100,
		"COLOR": "#BEBEBE",
		"CAR": {
		"BLUE": "#0000FF",
		"GREEN": "#00FF00"
	}
} );

styles/config.scss

$height: 120px;
$width: 500px;
$amount: 33%;
$animation-speed: 100s;
$color: #BEBEBE;
$car-blue: #0000FF;
$car-green: #00FF00;

Basic JS files.

The following task creates a plain JS file.

grunt.initConfig( {
	shared_config: {
		default: {
			options: {
				name: "options",
				jsFormat: "underscore"
			},
			src: "config.json",
			dest: "scripts/config.js"
		}
	}
} )

scripts/config.js

var options = {
	"height": 120,
	"width": 500,
	"amount": 0.33,
	"animation_speed": 100,
	"color": "#BEBEBE"
	"labeled_color": "red",
	"transform": "rotateY(0deg) translateZ(288px)",
	"car": {
		"blue": "#0000FF",
		"green": "#00FF00"
	},
    "some_text": "some text content"
    "path": "some/path/to/some/file.png"
};

Multiprocessing per Task

The following task allows processing of processing of multiple config files with seperate outputs using the files option.

grunt.initConfig( {
	shared_config: {
		filesTest: {
			options: {
				name: "globalConfig",
				cssFormat: "camelcase",
				jsFormat: "camelcase"
			},
			files: [
				{
					src: "config.json",
					dest: [
						"styles/config.scss",
						"styles/config.less"
					]
				},{
					src: [
						"config.json",
						"config1.json"
					],
					dest: [
						"styles/config1.scss",
						"scripts/config.js"
					]
				}
			]
		}
    }
} )

Generate Sass Maps

grunt.initConfig( {
	shared_config: {
		default: {
			options: {
				name: "globalConfig",
				useSassMaps: true
			},
			src: "config.json",
			dest: [
				"styles/config.scss"
			]
		},
	}
} )

scripts/config.scss

$globalConfig: (
	height: 120px,
	width: 500px,
	amount: 33%,
	animation-speed: 100s,
	color: #BEBEBE,
	labeled-color: red,
	transform: rotateY(0deg) translateZ(288px),
	car: (
		red: #FF0000,
		green: #00FF00,
		blue: #0000FF
	),
    some-text: "some text content"
    path: "some/path/to/some/file.png"
);

Masking

grunt.initConfig( {
	shared_config: {
		default: {
			options: {
				name: "globalConfig",
				useSassMaps: true
				mask: "mask.json",
			},
			src: "config.json",
			dest: [
				"styles/config.scss"
			]
		}
	}
} );

config.json

{
	"height": "120px",
	"width": "500px",
	"amount": "33%",
	"animation-speed": "100s",
	"color": "#BEBEBE",
	"car": {
		"red": "#FF0000",
		"green": "#00FF00",
		"blue": "#0000FF",
		"inner": {
			"seat": "10px"
		}
	},
	"path": "a/path/to/something.png"
	"string": "'some text content'"
}

mask.json

{
    "height": true,
    "animation-speed": false,
    "car": {
        "green": false,
        "inner": "allowLevel-1"
    },
    "path": false
    "string": false
}

styles/config.scss

$globalConfig: (
	height: 120px,
	car: (
		inner: (
			seat: 10px
		)
	)
);

Release History

  • 2015-03-11 v0.3.12 Flag for merging ng modules instead of overwriting
  • 2014-10-27 v0.3.9 Allow css values
  • 2014-09-25 v0.3.8 Allow null values
  • 2014-06-11 v0.3.2 Adds sass maps option
  • 2014-06-03 v0.3.0 Adds nested variables
  • 2014-04-25 v0.2.2 Fixes hex color definition in JS
  • 2013-05-11 v0.2.0 new configuration (with respect to the grunt conventions)
  • 2013-05-08 v0.1.0 Added Stylus and LESS support
  • 2013-05-08 v0.0.1 Initial Release

Contributors