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

@influitive/neutrino-preset-eslint

v2.2.1

Published

Neutrino preset for adding Influitives base JS ESLint config

Downloads

9

Readme

Neutrino influitive Preset

NPM version NPM downloads

@influitive/neutrino-preset-eslint is a Neutrino preset that supports linting JavaScript projects with influitive's base ESLint config

Features

  • Zero upfront configuration necessary to start linting your project
  • Modern Babel knowledge supporting ES modules, JSX (when used with React preset), Web and Node.js apps
  • Highly visible during development, fails compilation when building for production
  • Easily extensible to customize your project as needed

Requirements

  • Node.js v6.9+
  • Yarn or npm client
  • Neutrino v5, Neutrino build preset

Installation

@influitive/neutrino-preset-eslint can be installed via the Yarn or npm clients. Inside your project, make sure neutrino and @influitive/neutrino-preset-eslint are development dependencies. You will also be using another Neutrino preset for building your application source code.

Yarn

❯ yarn add --dev @influitive/neutrino-preset-eslint

npm

❯ npm install --save-dev @influitive/neutrino-preset-eslint

Project Layout

@influitive/neutrino-preset-eslint follows the standard project layout specified by Neutrino. This means that by default all project source code should live in a directory named src in the root of the project.

Quickstart

After adding the influitive preset to your Neutrino-built project, edit your project's package.json to add the preset for linting before your build preset. For example, if you are building your project using neutrino-preset-web:

{
  "scripts": {
    "start": "neutrino start --use @influitive/neutrino-preset-eslint neutrino-preset-web",
    "build": "neutrino build --use @influitive/neutrino-preset-eslint neutrino-preset-web"
  }
}

Or if you have set up Neutrino with neutrino.use in your package.json:

{
  "neutrino": {
    "use": [
      "@influitive/neutrino-preset-eslint",
      "neutrino-preset-web"
    ]
  }
}

Start the app, then check your console for any linting errors. If everything is successful, you should see no errors in the console. ESLint errors visible during development are reported, but will still continue to build and serve your project.

Yarn

❯ yarn start
✔ Development server running on: http://localhost:5000
✔ Build completed

ERROR in ./src/index.js

/web/src/index.js
  7:1   warning  Unexpected console statement                no-console
  7:14  error    A space is required after '{'               babel/object-curly-spacing
  7:20  error    Missing space before value for key 'hello'  key-spacing
  7:27  error    A space is required before '}'              babel/object-curly-spacing

✖ 4 problems (3 errors, 1 warning)

npm

❯ npm start

✔ Development server running on: http://localhost:5000
✔ Build completed

ERROR in ./src/index.js

/web/src/index.js
  7:1   warning  Unexpected console statement                no-console
  7:14  error    A space is required after '{'               babel/object-curly-spacing
  7:20  error    Missing space before value for key 'hello'  key-spacing
  7:27  error    A space is required before '}'              babel/object-curly-spacing

✖ 4 problems (3 errors, 1 warning)

Building

@influitive/neutrino-preset-eslint will cause errors to fail your build when creating a bundle via neutrino build. If you want to ease introduction of this linting preset to your project, consider only adding it to your preset list for neutrino start until all linting errors have been resolved.

❯ yarn build
clean-webpack-plugin: /web/build has been removed.
Build completed in 1.287s

./src/index.js

/Users/eli/code/neutrino-examples/web/src/index.js
  6:1   warning  Unexpected console statement            no-console
  6:14  error    A space is required after '{'           babel/object-curly-spacing
  6:16  error    Missing space before value for key 'a'  key-spacing
  6:17  error    A space is required before '}'          babel/object-curly-spacing

✖ 4 problems (3 errors, 1 warning)

error Command failed with exit code 1.

Customizing

To override the build configuration, start with the documentation on customization. @influitive/neutrino-preset-eslint creates some conventions to make overriding the configuration easier once you are ready to make changes.

Rules

The following is a list of rules and their identifiers which can be overridden:

  • lint: Lints JS and JSX files from the src directory using ESLint. Contains a single loader named eslint. This is inherited from neutrino-middleware-eslint.

Simple customization

By following the customization guide and knowing the rule and loader IDs above, you can override and augment the linting configuration directly from package.json. Note: Using the simple customization approach for linting changes can be quite verbose. Consider using advanced configuration below if this bothers you.

Example: Turn off semicolons from being required as defined by the influitive rules.

{
  "neutrino": {
    "config": {
      "module": {
        "rule": {
          "lint": {
            "use": {
              "eslint": {
                "options": {
                  "rules": {
                    "semi": "off"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Again, using simple customization for linting can be verbose. Consider using advanced customization if it suits your project.

Advanced configuration

By following the customization guide and knowing the rule and loader IDs above, you can override and augment the build by creating a JS module which overrides the config. This preset is also Neutrino middleware, making it easy to compose and extend the configuration.

Example: Turn off semicolons from being required as defined by the influitive rules.

// If using as middleware, remove from middleware and .use it from your override:
const influitive = require('@influitive/neutrino-preset-eslint');

module.exports = neutrino => {
  neutrino.use(influitive, {
    eslint: {
      rules: {
        semi: 'off'
      }
    }
  });
};
// If using as a preset from the CLI or configured in package.json,
// override its configuration directly:
const merge = require('deepmerge');

module.exports = neutrino => {
  neutrino.config.module
    .rule('lint')
      .use('eslint')
        .tap(options => merge(options, {
          rules: {
            semi: 'off'
          }
        }));
};

eslintrc Config

@influitive/neutrino-preset-eslint also provides a method for getting the ESLint configuration suitable for use in an eslintrc file. Typically this is used for providing hints or fix solutions to the development environment, e.g. IDEs and text editors. Doing this requires creating an instance of the Neutrino API and providing the presets uses. If you keep this information in neutrino.use in package.json, this should be relatively straightforward. By providing all the presets used to Neutrino, you can ensure all the linting options used across all those preset will be merged together for your development environment, without the need for copying, duplication, or loss of organization and separation. This is inherited from neutrino-middleware-eslint.

Example: Create a .eslintrc.js file in the root of the project.

// .eslintrc.js
const { Neutrino } = require('neutrino');
const pkg = require('./package.json');
const api = Neutrino();

// If the Influitive preset is not included in pkg.neutrino.use,
// use it manually:
api.use(require('@influitive/neutrino-preset-eslint'));

// Add the rest of the presets:
pkg.neutrino.use
  .map(require)
  .map(api.use);

module.exports = api.eslintrc();

Contributing

This preset is part of the neutrino-dev repository, a monorepo containing all resources for developing Neutrino and its core presets. Follow the contributing guide for details.