Code Monkey home page Code Monkey logo

css-modules-flow-types's Introduction

css-modules-flow-types

Build Status MIT License PRs Welcome

CLI and Webpack loader for creating Flow type definitions based on CSS Modules files.

This gives you:

  • auto-completing for css files in most editors
  • flow type safety showing usage of non existing classes

Read more about the background in this blog post: "Type safe CSS Modules with Flow".

Example

Given the following css file using CSS Modules:

@value primary: red;

.myClass {
  color: primary;
}

css-modules-flow-types creates the following .flow file next to it:

// @flow
/* This file is automatically generated by css-modules-flow-types */
declare module.exports: {|
  +'myClass': string;
  +'primary': string;
|};

Usage (Webpack loader)

style-loader

The css-modules-flow-types-loader need to be added right after after style-loader:

$ npm install --dev css-modules-flow-types-loader
$ yarn add -D css-modules-flow-types-loader
{
  test: /\.css$/,  // or the file format you are using for your CSS Modules
  use: [
    'style-loader',
    'css-modules-flow-types-loader',
    // Other loaders like css-loader after this:
    {
      ...
    }
  ]
}

css-loader

For css-loader, css-modules-flow-types-loader needs to come before css-loader.

{
  test: /\.css$/,  // or the file format you are using for your CSS Modules
  use: [
    ExtractTextPlugin.extract({
      use: [
        'css-modules-flow-types-loader',
        {
          loader: 'css-loader',
          options: {}, // Any options for css-loader
        }
      ]
    })
  ]
}

Usage (CLI)

$ npm install --dev css-modules-flow-types-cli
$ yarn add -D css-modules-flow-types-cli

This installs the runner as css-modules-flow-types.

And run css-modules-flow-types <input directory or glob> command.

For example, if you have .css files under src directory, exec the following:

Running,

css-modules-flow-types src

Creates *.css.flow files next to all css files.

(your project root)
- src/
    | myStyle.css
    | myStyle.css.flow [created]

Troubleshooting

Support for other file extensions

To support .scss, .sass, .scss.module or similar files extensions you need to update your .flowconfig file with the following section:

[options]

; Extensions
module.file_ext=.js
module.file_ext=.jsx
module.file_ext=.json
module.file_ext=.css
module.file_ext=.scss
module.file_ext=.sass
module.file_ext=.scss.module
// other files used by flow

Without this Flow might error out with Required module not found.

Dynamic imports in Webpack

In some cases, attempting to load imports using dynamic references could choke webpack as it attempts to parse .flow files and encounters unknown syntax. The solution is to exclude .flow files with a webpackExclude directive in the import statement.

If you have an import like this:

import(
  /* webpackChunkName: "[request]" */
  `/Path/To/Components/${ getComponent()}` 
)

Add webpackExclude like this:

import(
  /* webpackChunkName: "[request]" */
  /* webpackExclude: /\.flow$/ */
  `/Path/To/Components/${ getComponent()}` 
)

Inspiration

Contributing

To get started, run:

yarn

When developing:

yarn run check  # (runs lint and unit test)
yarn run lint
yarn run test
yarn run test:cov
yarn run test:watch

License

This software is released under the MIT License.

css-modules-flow-types's People

Contributors

9renpoto avatar alexeychikk avatar dependabot[bot] avatar fanich37 avatar kubijo avatar loganbarnett avatar martincerny-awin avatar ragnar-h avatar skovhus avatar soulofmischief avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.