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

@quantumblack/javascript-standards

v1.9.0

Published

Documentation and configuration files for QB's JavaScript Coding Standards

Downloads

145

Readme

JavaScript Standards

Documentation and configuration files for QB's JavaScript Coding Standards.

If any JavaScript config references file locations, please copy, don't extend.

Currently we advise copying the contents of our configuration files, and NOT extending them. References within JavaScript files to path.resolve, __dirname, and other constructs concerned with path resolution work best when the file is evaluated when sitting in the root of the project. For example, if you required a file at relative/path/, any references to __dirname within that file would be evaluated to the position of that relative file, and not the project root.

View our Coding Styleguide:


Using Configuration Files

Assumptions regarding project structure project structure:

src/
dist/

Installing Dependencies

Install this package via npm:

npm i @quantumblack/javascript-standards --save-dev`.

You'll need to request access to this repo while it's on QB's private bitbucket.

ESLint


We use Airbnb's ESLint config extended with a number of our preferences.

Install ESLint

npm i eslint --save-dev

Install Dependencies

(
  export PKG=eslint-config-airbnb;
  npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest" eslint-plugin-require-jsdoc
)

Create the configuration file

Create a file called .eslintrc.js in your project. This is usually in the root of your source folder, but it can be anywhere (remember to update the relative path accordingly).

Your new file should extend QB's ESLint config. In this case, we are using config specific to a React codebase:

var baseConfig = require('@quantumblack/javascript-standards/config/react/eslint/.eslintrc-source');

module.exports = baseConfig;

Config types

  • .eslintrc-source for JavaScript source code
  • .eslintrc-test for JavaScript tests - TODO
  • .eslintrc-config for linting config files! - TODO

Stylelint

Enforces our rules for defining CSS syntax.

Install

npm i stylelint --save-dev

Install Dependencies

npm i stylelint-order --save-dev

Create a stylelint config file called stylelint.config.js with the following contents:

var baseConfig = require('@quantumblack/javascript-standards/config/stylelint/stylelint.config.js');

// you can extend or modify rules here

module.exports = baseConfig;

See stylelint configuration) where you extend our rules and overrides as required:


Webpack

Install

npm i webpack --save-dev

Our configuration is designed to work with Webpack 2. Please ensure this version is installed. If required, see the Migrating Guide from v1 to v2.

Install Dependencies

npm i babel-plugin-webpack-loaders webpack-hot-middleware css-loader style-loader babel-loader svg-react-loader babel-plugin-transform-react-jsx --save-dev

Customizing Configuration

Create files named webpack.dev.config.js and webpack.build.config.js in your project.

We recommend copying the contents of our webpack config files (found in /config/react/webpack/) to your project, as extending them can cause issues relating to path resolution. For example, __dirname will evaluate to the location at which the file is located, and you would normally assume this to be the root of the project within webpack config.

Development and Build Config

As our webpack config filenames have been slightly customised, you'll need to pass the filename in within the webpack arguments in your package.json scripts:

"scripts": {
    "build": "webpack -p --config webpack.build.config",
    "build:dev": "webpack -d --config webpack.dev.config"
}

Our repo contains configuration for a dev webpack config to use with webpack-dev-server for hot reloading, which includes warnings and sourcemaps enabled.


Babel

Install

If you want to use Babel from the CLI you can install babel-cli or if you want to use the Node API you can install babel-core.

npm i babel-core --save-dev

Install Dependencies

The Babel presets below enable lots of plugins.

npm i babel-loader babel-plugin-lodash babel-plugin-transform-object-rest-spread babel-plugin-webpack-loaders babel-preset-env babel-preset-react babel-register --save-dev

Create a file called .babelrc in your project.

The file should extend QB's Babel config. In this case, we are using config specific to a React codebase:

{
  "extends": "./node_modules/@quantumblack/javascript-standards/config/react/babel/.babelrc"
}

Extending with additional plugins

Once you extend our base .babelrc, you can enable any additional plugins by installing them as a dev dependency, and adding to the plugins property.

Here is our extended version from a project using lodash and AVA:

{
  "extends": "./node_modules/@quantumblack/javascript-standards/config/react/babel/.babelrc",
  "plugins": [
    "lodash",
    "transform-es2015-modules-commonjs",
    "transform-es2015-destructuring",
    "transform-object-rest-spread"
  ],
  "env": {
    "AVA": {
      "plugins": [
        ["babel-plugin-webpack-loaders", {
          "config": "${CONFIG}",
          "verbose": true
        }]
      ]
    }
  }
}

AVA


We are able to test a Webpack project via AVA with a custom Webpack config file.

You may need to use different loaders, or stub certain endpoints out in your test environment.

Install

npm i ava --save-dev

Install Dependencies

  • Babel register ensures require hook will bind itself to node's require and automatically compile files on the fly.
  • Ignore styles ensures css/style imports are ignored when running in Node.
npm i babel-register ignore-styles babel-plugin-webpack-loaders babel-plugin-transform-object-assign browser-env --save-dev

Extending Base Configuration

Create a file called webpack.ava.config.js in your project.

We recommend copying the contents of /config/ava/webpack.ava.config.js to this file.

Mocking the browser environment.

We want to ensure things in the browser scope like document, window, etc, exist in our test environment. Create a file test/helpers/setup-browser-env.js with the following contents:

import browserEnv from 'browser-env';
browserEnv();

Add a command to your scripts property and add AVA configuration inside your package.json. You probably want to only run Unit Tests if your lint task succeeds.

"scripts": {
  "ava": "CONFIG=$(pwd)/webpack.ava.config.js NODE_ENV=AVA BABEL_DISABLE_CACHE=1 ava",
  "eslint": "eslint src/*.js src/**/*.js src/**/*.jsx",
  "test": "npm run eslint && npm run ava"
},
"ava": {
  "files": [
    "test/**/*.js",
    "src/**/*.test.js"
  ],
  "verbose": true,
  "babel": "inherit",
  "require": [
    "babel-register",
    "ignore-styles",
    "./test/helpers/setup-browser-env.js"
  ]
},

PostCSS

Install

npm i autoprefixer postcss-loader postcss-cssnext --save-dev

Configuration

This is configured in our webpack config via postcss-loader.


React Styleguidist

A React style guide generator. This package includes default configuration which makes a number of assumptions about your project structure, all of which can be overridden.

Install

npm i react-styleguidist@beta --save-dev

Webpack 2 support is only available in the beta release.

Install Dependencies

  • Lodash is used in our configuration file.
npm i lodash --save-dev

Extending Base Configuration

Create a file called styleguide.config.js in your project root.

Copy the contents of /config/react-styleguidist/styleguide.config.js to it, and modify as required to match your project requirements.


Editor Config Files

Config files used to configure your IDE across a team are stored in config/editor. Our Editor Config ensures white space is formatted consistently according to a simple set of rules. You may need to install an EditorConfig plugin in your IDE to ensure the rules are implemented automatically.

Create a file called .editorconfig in your project root, with the following contents:

# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true

# 2 space indentation
[**.*]
indent_style = space
indent_size = 2

[**.md]
indent_style = space
indent_size = 4

This file can't be extended, and must be copied. For reference, the file is stored in this repo at /config/editor/.editorconfig.