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

wix-gruntfile

v1.1.0

Published

Wix Gruntfile.

Downloads

1,743

Readme

wix-gruntfile

Customizable Gruntfile built to work with wix-angular projects

Installation

No installation needed in case you scaffold using yo wix-angular

Otherwise - npm install --save-dev wix-gruntfile

Create your own Gruntfile.js which uses wix-gruntfile:

'use strict';

module.exports = function (grunt) {
  require('wix-gruntfile')(grunt, {
    staging: 'pizza',
    port: 9000,
    preloadModule: 'newsFeedCommon',
    translationsModule: 'wixNewsFeedTranslations',
    karmaConf: require('./karma.conf.js')
  });

  // keep reading for instructions on how to add custom stuff to your grunt
};

Run project

grunt serve will watch your files and automatically compile, lint, unit test and display in browser

While grunt serve is running, debug unit tests at http://localhost:8880/ and debug end to end test at http://localhost:9000/runner.html

When working on coverage improvements run grunt serve:coverage (unit tests are difficult to debug in this mode) or alternatively run grunt test to run all unit tests one time with coverage.

Run e2e tests

Launch e2e test by running grunt test:e2e. Make sure that grunt serve is running.

Run e2e tests from IDE

You can run and debug protractor tests directly from your IDE (Intellij/Webstorm).

To set the configuration, follow the instructions from protractor docs.

Build the project locally:

grunt build will run the complete build process including e2e tests (only on chrome)

grunt serve:dist will serve the dist folder so you can see the app after build (good for debugging minification issues) and you can run protractor tests against it with grunt test:e2e

Build the project in CI:

grunt build:ci jshint warning will cause failure, karma teamcity reporter will be enabled

grunt test:ci run e2e tests on sauce labs (make sure you have a sauce labs tunnel running in the background)

Configuration

Here is a list of available options:

{
  port: 9000,                              //port used for local server
  livereload: 35729,                       //port used for livereload server
  preloadModule: 'myAppInternal',          //module name for preload html
  translationsModule: 'myAppTranslations', //module name for translation js
  svgFontName: 'my-app',                   //font name for svg icons
  karmaConf: require('./karma.conf.js'),   //inheriting your karma config
  protractor: true                         //should run e2e tests
  proxies: {}, //add more proxies to your connect server: `{'/_test/': 'http://www.wix.com/', ...}`
  beforeProxies: {}, //same as above, only it insert the proxy at the beginning of the list
  suppressVerifyNpmScripts: false, // if true, will suppress package.json scripts section modifications.
  useModulesStructure: false // if true, will assume project uses a modular file structure (see below for an elaboration)
}

Note: you can add your own connect plugins by passing function value in the proxy maps.

Modular file structure

The basic configuration assumes you are using a traditional file structure, where all the controllers are stored in the "controllers" directory, services are in "services" directory and so on. If you wish to use a modular file structure, storing each module's scripts, styles and views in the same folder, you can do so by passing 'useModulesStructure: true' to the configuration object.

A further explanation can be found here

Modifying existing config

Sometimes you will want to modify the configuration of a specific section in the external Gruntfile.

//this is a recursive modification, meaning it overrides only properties that are not objects
grunt.modifyTask('task-name', {options: {someOptionObj: {someOptionProperty: 'someValue'}}});

//this does the same as the modification above, but obviously is can do a lot more
grunt.modifyTask('task-name', function (task) {
  task.options = task.options || {};
  task.someOptionObj = task.someOptionObj || {};
  task.someOptionObj.someOptionProperty = 'someValue';
  return task;
});

Or maybe even add your own configuration section to the build process

grunt.loadNpmTasks('some-new-grunt-plugin');
grunt.config('some-new-grunt-plugin', {whatever: 'whatever'});
//insert your task after an existing task
grunt.hookTask('existing-task').push('some-new-grunt-plugin');
//or insert it before the existing task
grunt.hookTask('existing-task').unshift('some-new-grunt-plugin');

Common overrides

Do not fail build in case jshint/jscs/scsslint is failing. This should be used only in rare cases when refactoring old code!

grunt.hookTask('pre-build').unshift('ignore-code-style-checks');

Override the url that opens in the dashboard when you run grunt serve:

grunt.modifyTask('yeoman', {local: 'http://localhost:9000/'});

Override the proxied url for _api calls:

grunt.modifyTask('yeoman', {api: 'http://www.wix.com/_api/'});

Override the proxied url for _api calls in e2e tests:

grunt.modifyTask('yeoman', {e2eTestServer: 'http://localhost:3333/'});

Override sauce labs configuration:

process.env.SAUCE_USERNAME = 'shahata';
process.env.SAUCE_ACCESS_KEY = 'xxx';
process.env.SAUCE_BROWSERS = 'Chrome FF IE10 IE11';

Add private grunt file that overrides stuff you don't want to commit:

try {
  require('./Gruntfile.private.js')(grunt); //override stuff locally
} catch (err) {
  if (err.code !== 'MODULE_NOT_FOUND') {
    throw (err);
  }
}

WixStyle inline

To enable the wixStyle inline feature, inline property of the Gruntfile options should be true.

Common use of the inline:

index.vm

<!-- process-tags prefix('${baseStaticUrl}') -->
<!-- build:css({.tmp,app}) styles/main.css -->
<!-- endbuild -->
<!-- end-process-tags -->
<link rel="stylesheet" href="styles/mixed-css-file-with-wix-params.css?__wixStyleInline=inline.css" />

Notes:

  1. wixStyleInline task will add the remain file to the concat of the first CSS usemin block, The VM file should have at least one usemin css block, otherwise the remain file will not concatenated & minified.
  2. The task will extract wix style params from mixed-css-file-with-wix-params.css and generate 2 files: inline.css(the file that will be inlined) and mixed-css-file-with-wix-params.remain.css(the file that will be minified & concatenated)
  3. Wix style implements fonts as malformed CSS declaration ({{Body-M}};, without attribute). In order to keep POSTCSS parser intact, you should add a font attribute and semicolon before the wix style param, something like font:;{{Body-M}};- this is valid wix style param, and the parser will not break on it. The extractStyles task will eventually convert it to {{Body-M}};.