Giter Site home page Giter Site logo

postcss-load-config's Introduction

Load Config

Install

npm i -D postcss-load-config

Usage

npm i -S|-D postcss-plugin

Install all required PostCSS plugins and save them to your package.json dependencies/devDependencies

Then create a PostCSS config file by choosing one of the following formats

package.json

Create a postcss section in your project's package.json

Project (Root)
  |– client
  |– public
  |
  |- package.json
{
  "postcss": {
    "parser": "sugarss",
    "map": false,
    "plugins": {
      "postcss-plugin": {}
    }
  }
}

.postcssrc

Create a .postcssrc file in JSON or YAML format

ℹ️ It's recommended to use an extension (e.g .postcssrc.json or .postcssrc.yml) instead of .postcssrc

Project (Root)
  |– client
  |– public
  |
  |- (.postcssrc|.postcssrc.json|.postcssrc.yml)
  |- package.json

.postcssrc.json

{
  "parser": "sugarss",
  "map": false,
  "plugins": {
    "postcss-plugin": {}
  }
}

.postcssrc.yml

parser: sugarss
map: false
plugins:
  postcss-plugin: {}

Note

For YAML configs, you must have yaml installed as a peer dependency.

.postcssrc.js or postcss.config.js

You may need some logic within your config. In this case create JS/TS file named:

  • .postcssrc.js
  • .postcssrc.mjs
  • .postcssrc.cjs
  • .postcssrc.ts
  • .postcssrc.mts
  • .postcssrc.cts
  • postcss.config.js
  • postcss.config.mjs
  • postcss.config.cjs
  • postcss.config.ts
  • postcss.config.mts
  • postcss.config.cts

Note

For TypeScript configs, you must have tsx or jiti installed as a peer dependency.

Project (Root)
  |– client
  |– public
  |- (.postcssrc|postcss.config).(js|mjs|cjs|ts|mts|cts)
  |- package.json

You can export the config as an {Object}

.postcssrc.js

module.exports = {
  parser: 'sugarss',
  map: false,
  plugins: {
    'postcss-plugin': {}
  }
}

Or export a {Function} that returns the config (more about the ctx param below)

.postcssrc.js

module.exports = (ctx) => ({
  parser: ctx.parser ? 'sugarss' : false,
  map: ctx.env === 'development' ? ctx.map : false,
  plugins: {
    'postcss-plugin': ctx.options.plugin
  }
})

Plugins can be loaded either using an {Object} or an {Array}

{Object}

.postcssrc.js

module.exports = ({ env }) => ({
  ...options,
  plugins: {
    'postcss-plugin': env === 'production' ? {} : false
  }
})

ℹ️ When using an {Object}, the key can be a Node.js module name, a path to a JavaScript file that is relative to the directory of the PostCSS config file, or an absolute path to a JavaScript file.

{Array}

.postcssrc.js

module.exports = ({ env }) => ({
  ...options,
  plugins: [
    env === 'production' ? require('postcss-plugin')() : false
  ]
})

⚠️ When using an {Array}, make sure to require() each plugin

Options

Name Type Default Description
to {String} undefined Destination File Path
map {String|Object} false Enable/Disable Source Maps
from {String} undefined Source File Path
parser {String|Function} false Custom PostCSS Parser
syntax {String|Function} false Custom PostCSS Syntax
stringifier {String|Function} false Custom PostCSS Stringifier

parser

.postcssrc.js

module.exports = {
  parser: 'sugarss'
}

syntax

.postcssrc.js

module.exports = {
  syntax: 'postcss-scss'
}

stringifier

.postcssrc.js

module.exports = {
  stringifier: 'midas'
}

.postcssrc.js

module.exports = {
  map: 'inline'
}

⚠️ In most cases options.from && options.to are set by the third-party which integrates this package (CLI, gulp, webpack). It's unlikely one needs to set/use options.from && options.to within a config file. Unless you're a third-party plugin author using this module and its Node API directly dont't set options.from && options.to yourself

to

module.exports = {
  to: 'path/to/dest.css'
}

from

module.exports = {
  from: 'path/to/src.css'
}

Plugins

{} || null

The plugin will be loaded with defaults

'postcss-plugin': {} || null

.postcssrc.js

module.exports = {
  plugins: {
    'postcss-plugin': {} || null
  }
}

⚠️ {} must be an empty {Object} literal

{Object}

The plugin will be loaded with given options

'postcss-plugin': { option: '', option: '' }

.postcssrc.js

module.exports = {
  plugins: {
    'postcss-plugin': { option: '', option: '' }
  }
}

false

The plugin will not be loaded

'postcss-plugin': false

.postcssrc.js

module.exports = {
  plugins: {
    'postcss-plugin': false
  }
}

Ordering

Plugin execution order is determined by declaration in the plugins section (top-down)

{
  plugins: {
    'postcss-plugin': {}, // [0]
    'postcss-plugin': {}, // [1]
    'postcss-plugin': {}  // [2]
  }
}

Context

When using a {Function} (postcss.config.js or .postcssrc.js), it's possible to pass context to postcss-load-config, which will be evaluated while loading your config. By default ctx.env (process.env.NODE_ENV) and ctx.cwd (process.cwd()) are available on the ctx {Object}

ℹ️ Most third-party integrations add additional properties to the ctx (e.g postcss-loader). Check the specific module's README for more information about what is available on the respective ctx

Examples

postcss.config.js

module.exports = (ctx) => ({
  parser: ctx.parser ? 'sugarss' : false,
  map: ctx.env === 'development' ? ctx.map : false,
  plugins: {
    'postcss-import': {},
    'postcss-nested': {},
    cssnano: ctx.env === 'production' ? {} : false
  }
})
"scripts": {
  "build": "NODE_ENV=production node postcss",
  "start": "NODE_ENV=development node postcss"
}
const { readFileSync } = require('fs')

const postcss = require('postcss')
const postcssrc = require('postcss-load-config')

const css = readFileSync('index.css', 'utf8')

const ctx = { parser: true, map: 'inline' }

postcssrc(ctx).then(({ plugins, options }) => {
  postcss(plugins)
    .process(css, options)
    .then((result) => console.log(result.css))
})
"scripts": {
  "build": "NODE_ENV=production gulp",
  "start": "NODE_ENV=development gulp"
}
const { task, src, dest, series, watch } = require('gulp')

const postcss = require('gulp-postcssrc')

const css = () => {
  src('src/*.css')
    .pipe(postcss())
    .pipe(dest('dest'))
})

task('watch', () => {
  watch(['src/*.css', 'postcss.config.js'], css)
})

task('default', series(css, 'watch'))
"scripts": {
  "build": "NODE_ENV=production webpack",
  "start": "NODE_ENV=development webpack-dev-server"
}

webpack.config.js

module.exports = (env) => ({
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader',
          'postcss-loader'
        ]
      }
    ]
  }
})

Maintainers


Michael Ciniawsky

Mateusz Derks

Contributors


Ryan Dunckel

Patrick Gilday

Dalton Santos

François Wouts
Security Contact

To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.

postcss-load-config's People

Contributors

43081j avatar ai avatar bluwy avatar bmatcuk avatar brc-dd avatar chang-ke avatar daltones avatar dependabot[bot] avatar duncanbeevers avatar ertrzyiks avatar fwouts avatar g-rath avatar gerardo-navarro avatar greenkeeper[bot] avatar greenkeeperio-bot avatar hyb628 avatar kossnocorp avatar lourd avatar mattclegg avatar michael-ciniawsky avatar michael42 avatar mojavelinux avatar pcgilday avatar pengbouestc avatar privatenumber avatar sapphi-red avatar sergeymirasov avatar sparty02 avatar toledosdl avatar usmanyunusov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

postcss-load-config's Issues

An in-range update of postcss-sprites is breaking the build 🚨

Version 4.1.0 of postcss-sprites just got published.

Branch Build failing 🚨
Dependency postcss-sprites
Current Version 4.0.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss-sprites is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Commits

The new version differs by 7 commits .

  • 9af4fe6 Bump v4.1.0
  • 8cb146f Update 'stylesheetPath' option in README
  • b7d3019 Merge pull request #73 from evandavis/file-relative-sprites
  • 1d0c2b3 Merge pull request #70 from niksy/issue-66
  • e910a7c locate sprites relative to the stylesheet
  • a7021b4 Add 'originalUrl' property to the image object
  • 131f06b Add support for Promises in "onSaveSpritesheet"

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of cssnano is breaking the build 🚨

The devDependency cssnano was updated from 4.1.0 to 4.1.1.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

cssnano is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • continuous-integration/appveyor/branch: AppVeyor build failed (Details).
  • continuous-integration/travis-ci/push: The Travis CI build failed (Details).

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

node.js 0.12 support

Right now postcss-loader falls on node.js 0.12 with:

Error: /home/travis/build/postcss/postcss-loader/node_modules/postcss-load-config/index.js:7
const config = require('cosmiconfig')
^^^^^
Use of const in strict mode.

I know that we could ignore node.js 0.12, but fix will be so small. I think it is better to support it in this case. Anyway we have a lot of users on 0.12.

Cannot read property 'config' of null

I upgraded a project to postcss-loader 1.0.0 and during the build, I've noticed this error:

TypeError: Cannot read property 'config' of null
    at /Users/tleunen/dev/xxxx/node_modules/postcss-load-config/index.js:50:22
OS Node npm PostCSS
MacOS 10.12 6.9.1 3.10.8 1.0.0

Failed to install postcss-load-config on centos No compatible version found: require-from-string@^1.1.0

-bash-4.1$ npm install postcss-load-config
npm ERR! Linux 2.6.32-642.6.2.el6.x86_64
npm ERR! argv "/dbc/blr-dbc404/vinayv/nodejs/lin64/bin/node" "/dbc/blr-dbc404/vinayv/nodejs/lin64/bin/npm" "install" "postcss-load-config"
npm ERR! node v6.9.4
npm ERR! npm v3.10.10
npm ERR! code ETARGET

npm ERR! notarget No compatible version found: require-from-string@^1.1.0
npm ERR! notarget Valid install targets:
npm ERR! notarget 2.0.2
npm ERR! notarget
npm ERR! notarget This is most likely not a problem with npm itself.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! notarget
npm ERR! notarget It was specified as a dependency of 'cosmiconfig'
npm ERR! notarget

npm ERR! Please include the following file with any support request:

-bash-4.1$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.6 (Final)
Release: 6.6
Codename: Final

-bash-4.1$ npm -v
3.10.10
-bash-4.1$ node -v
v6.9.4

An in-range update of postcss is breaking the build 🚨

Version 5.2.9 of postcss just got published.

Branch Build failing 🚨
Dependency postcss
Current Version 5.2.8
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes 5.2.9
  • Update TypeScript definitions (by @jedmao).
Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of postcss is breaking the build 🚨

Version 6.0.15 of postcss was just published.

Branch Build failing 🚨
Dependency postcss
Current Version 6.0.14
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

postcss is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • coverage/coveralls Coverage pending from Coveralls.io Details
  • continuous-integration/travis-ci/push The Travis CI build could not complete due to an error Details

Release Notes 6.0.15
  • Add warning about missed from option on process().then() call.
  • Add IE 10 support.
FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

ctx reference cause to webpack memory leak

Problem

module.exports = function postcssrc (ctx, path, options) {
ctx = assign({ cwd: process.cwd(), env: process.env.NODE_ENV }, ctx)
...

when this code run in webpack-dev-server, it will transmit the NormalModule object to ctx parameter.
it will never release this object, and cause memory leak.

I have to fixed this problem like this:
ctx = assign({ cwd: process.cwd(), env: process.env.NODE_ENV });

An in-range update of postcss-load-options is breaking the build 🚨

Version 1.1.0 of postcss-load-options just got published.

Branch Build failing 🚨
Dependency postcss-load-options
Current Version 1.0.2
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss-load-options is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes v1.1.0

CHANGELOG

Commits

The new version differs by 15 commits .

  • ca94930 chore(release): v1.0.2...1.1.0
  • ef25cad docs(README): rm subtitle
  • 8fdbece chore(package): update deps
  • d8349b7 feat(index): config file
  • 6155028 ci(travis): simplify setup
  • eb0123c chore(npm): rm unnecessary files
  • d58899f test(*): refactor
  • 136eced chore(#23): add logo.svg to .npmignore (@wtgtybhertgeghgtwtg)
  • b31c8cb Add logo.svg to .npmignore.
  • 7b0c0f7 chore(package): update ava v0.16.0...0.17.0
  • a5c9997 chore(package): update ava to version 0.17.0
  • 75e823e chore(#18): Support receiving instances of parser/syntax/stringifier (@Kovensky)
  • f7835d6 chore(package): update postcss-scss v0.3.1...0.4.0
  • 7c478ef chore(package): update postcss-scss to version 0.4.0
  • f5582b6 Support receiving instances of parser/syntax/stringifier

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of postcss-load-plugins is breaking the build 🚨

Version 2.2.0 of postcss-load-plugins just got published.

Branch Build failing 🚨
Dependency postcss-load-plugins
Current Version 2.1.0
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss-load-plugins is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes v2.2.0

CHANGELOG

Commits

The new version differs by 10 commits .

  • 57c4124 test(err): fix path
  • 024a953 chore(release): v2.1.0...v2.2.0
  • 67a51b7 test(err): refactor
  • f0c631f docs(README): simplify links, fix typo
  • 85f25bf docs(INDEX): v2.1.0...v2.2.0
  • f3a4048 feat(index): improve error handling
  • a64bb03 feat(lib): improve error handling
  • 2d73031 chore(npm): rm unnecessary files
  • cb40420 ci(travis): simplify setup
  • 03e01b9 test(*): refactor

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of cosmiconfig is breaking the build 🚨

Version 2.1.1 of cosmiconfig just got published.

Branch Build failing 🚨
Dependency cosmiconfig
Current Version 2.1.0
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

As cosmiconfig is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Commits

The new version differs by 3 commits .

  • 833385b Prepare 2.1.1
  • 6c4a1c7 Merge pull request #47 from davidtheclark/no-graceful-fs
  • de81cf6 Remove graceful-fs

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of postcss is breaking the build 🚨

Version 5.2.7 of postcss just got published.

Branch Build failing 🚨
Dependency postcss
Current Version 5.2.6
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

Update `cosmiconfig`

i found an issue with last babel7 ,

don't know where it was from
but when i installed the last cosmiconfig 3 it was resolved .. maybe you should to update it in your repo

An in-range update of postcss is breaking the build 🚨

Version 5.2.6 of postcss just got published.

Branch Build failing 🚨
Dependency postcss
Current Version 5.2.5
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes 5.2.6
  • Fix postcss.vendor for values with spaces (by @gucong3000).
Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of cssnano is breaking the build 🚨

Version 3.10.0 of cssnano just got published.

Branch Build failing 🚨
Dependency cssnano
Current Version 3.9.1
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As cssnano is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes v3.10.0
  • cssnano will no longer console.warn any messages when using deprecated options; these are now sent to PostCSS. You will be able to see them if you use a PostCSS runner with built-in messages support, or alternately by loading postcss-reporter or postcss-browser-reporter in your plugins list.
  • Prepares support for grid identifier reduction by adding it to the list of optimisations turned off when options.safe is set to true.
  • Adds support for normalizing unicode-range descriptors. Values will be converted when the code matches 0 & f in the same place on both sides of the range. So, u+2000-2fff can be converted to u+2???, but u+2100-2fff will be left as it is.
Commits

The new version differs by 15 commits .

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of postcss-sprites is breaking the build 🚨

Version 4.1.1 of postcss-sprites just got published.

Branch Build failing 🚨
Dependency postcss-sprites
Current Version 4.1.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss-sprites is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Commits

The new version differs by 3 commits .

  • a7e02d2 Bump v4.1.1
  • 9ae47c9 Use hashed path for IDs in SVG sprites
  • 828f0e4 Apply background-size to all sprites

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

Don't write errors to stdout

Problem

postcss-load-config writes errors to stdout: https://github.com/michael-ciniawsky/postcss-load-config/blob/master/index.js#L72

This has several problems:

  1. It takes away control of error handling from library users.
  2. Since errors are written to stdout (not stderr), if an error is produced when running this in a CLI context and using output redirection (> or |), the error will go unnoticed.
  3. It also makes it nearly impossible for you to test your error cases.

Libraries shouldn't include a catch block at the end of promise chains unless they are ignoring the error, or re-trying after a timeout, etc.

Also https://github.com/michael-ciniawsky/postcss-load-config/blob/master/index.js#L49 should throw an error (that will follow the promise chain) instead of logging.


https://github.com/michael-ciniawsky/postcss-load-plugins & https://github.com/michael-ciniawsky/postcss-load-options have the same problem.

Context lost in webpack's watch mode

The issue is a follow-up of another issue I created in the postcss-import repository:
postcss/postcss-import#302

Problem

In my setup, when I launch webpack in watch mode, the first postcss build is fine, but the second and the following builds are broken. It's like the postcss config was not there anymore.

Details

The setup can be found here:
ennovum/kickoff@0671762

@michael-ciniawsky gave me an idea to export a function (instead of an object) from postcss.config.js. I did that and logged what happened. I discovered that while rebuilding, my buildconf object is modified - the postcss section is cleared. I think it's the postcss-load-config module that does that. When I export a clone of my buildconf.postcss object, the issue is resolved. I don't think it's appropriate for the lib to modify the input object. I shouldn't have to clone it.

What do you think about it?

Config not applied using Yaml formatted with tabs

Problem

Config file .postcssrc.yaml is not applied if I use Yaml formatted with tabs.

Worked with two spaces.

Details

Working:

plugins:
  postcss-axis: {}
  postcss-short: {}
  postcss-position-alt: {}
  autoprefixer: {}

Not working:

plugins:
	postcss-axis: {}
	postcss-short: {}
	postcss-position-alt: {}
	autoprefixer: {}

Error Logs

There is no error when I using poi

Environment

Please provide information about your environment.

OS Node yarn PostCSS
macOS 10.13.2 9.3.0 1.3.2 5.2.18

Possible to modify specific plugin config at runtime?

Problem

I'm looking to set up a centralized PostCSS watcher, that is able to compile across multiple projects.
This means postcss-partial-import plugin needs a different path parameter on every chokidar watch event postcss execution.

Details

console.log( plugins ) looks like difficult to find the plugin whose options I want to modify, since they seem to be listed as anonymous objects..

[ { [Function] postcssPlugin: 'postcss-utilities', postcssVersion: '5.2.17' },
  Processor {                                                                      
    version: '6.0.8',                                        
    plugins:                                                                 
     [ [Object],                                             
       [Object],                       
       [Object],                                             
       [Object],                                                                                                                 
       [Object],                                             
       [Object],       
       [Object],                       
       [Object],                       
       [Object],                                             
       [Object],                                            
       [Object],                         
       [Object],                                             
       [Object],                              
       [Object],               
       [Object] ],                                           
    postcssPlugin: 'precss',                                                                    
    postcssVersion: '6.0.8' },                                                                                                    
  { [Function] postcssPlugin: 'postcss-calc', postcssVersion: '6.0.8' },
  { [Function]                                          
    postcssPlugin: 'postcss-media-minmax',                                                                                        
    postcssVersion: '6.0.8' },                            
  Processor {                                                
    version: '5.2.17',                                    
    plugins: [ [Function: appendInputDir], [Object] ],       
    postcssPlugin: 'postcss-assets',     
    postcssVersion: '5.2.17' },                        
  { [Function]                
    postcssPlugin: 'postcss-inline-svg',     
    postcssVersion: '5.2.17' },                                                                                                                                                                                        { [Function]                                                                                                                                                                                                           postcssPlugin: 'postcss-modular-scale',                                                                                                                                                                              postcssVersion: '5.2.17' },                                                                                                                                                                                        { [Function: plugin]                                                                   
    options: { grid: false },                                   
    info: [Function],
    postcssPlugin: 'autoprefixer',
    postcssVersion: '6.0.6' },
  { [Function]

I was expecting to be able to do something like plugins['precss'].import.path = 'foo/bar/', but there are no dictionary/array indexes available after configuration load.

Environment

See precss in particular.

$ [-] cat postcss.config.js
module.exports = (ctx) => ({
    parser: 'postcss-scss',
    plugins: {
        'postcss-utilities': {},
        'precss': {
            import: {
                extension: '.scss',
                prefix: '_'
            }
        },
        'postcss-calc': {
            mediaQueries: true
        },
        'postcss-media-minmax': {},
        'postcss-assets': {},
        'postcss-inline-svg': {},
        'postcss-modular-scale': {},
        'autoprefixer': {},
        'postcss-browser-reporter': {}
    }
});

Please provide information about your environment.

OS Node npm PostCSS
Gentoo 6.9.4 3.10.10 6.0.8

Your thoughts?

Handle (plugin.default && typeof plugin.default === 'function')

Object.keys(config)
  .filter(function (plugin) {
     return config[plugin] !== false ? plugin : ''
  })
  .forEach(function (plugin) {
+  plugin = load(plugin, config[plugin])
+  if (plugin.default && typeof plugin.default === 'function') plugin = plugin.default
+  return plugins.push(plugin)
-  return plugins.push(load(plugin, config[plugin]))
  })

An in-range update of cssnano is breaking the build 🚨

Version 3.8.1 of cssnano just got published.

Branch Build failing 🚨
Dependency cssnano
Current Version 3.8.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As cssnano is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes v3.8.1
Commits

The new version differs by 8 commits .

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

Order fallback to devDeps/deps?

It might be handy to fallback to determining the plugin order from devDependencies then dependencies in the absence of postcss.plugins in package.json. No need to list them all twice unless you want to specify options…

config.file

Expose postcss.config.js filepath to enable watching the config file across various build tools.

postcssrc(ctx, ctx.dir).then((config) => {
   console.log(config.file) // => absolute/path/to/postcss.config.js
})

An in-range update of postcss-load-plugins is breaking the build 🚨

Version 2.1.0 of postcss-load-plugins just got published.

Branch Build failing 🚨
Dependency postcss-load-plugins
Current Version 2.0.0
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss-load-plugins is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Commits

The new version differs by 12 commits .

  • 3e403b2 test(err): fix config
  • ca26119 chore(release): v2.0.0...2.1.0
  • 2b75645 docs(README): update examples, fix style
  • 7bfc37c refactor(plugins): improve error handling
  • c643172 feat(index): expose config file
  • 8f7cebe docs(LICENSE): fix typo
  • 7f0f874 test(): mv js-array => js/array, add tests for config.file
  • 62f0087 chore(package): update ava v0.16.0...0.17.0
  • 844033d chore(package): update ava to version 0.17.0
  • 30a3e9f chore(#17): Make the validation logic more permissive (@Kovensky)
  • 6aaa9db Add tests for the array validator
  • 00d4259 Make the validation logic more permissive

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

Published npm version does not match source

Here is the published version:
https://unpkg.com/[email protected]/index.js

Note the following code:

  return config('postcss', options)
    .load(path)
    .then(function (result) {
      if (result === undefined) {
        console.log(
          'PostCSS Config could not be loaded. Please check your PostCSS Config.'
        )
      }

      result === undefined ? { config: {} } : result
      result = result.config

      return result
    })

Compare that to the source in this github repo:

  return config('postcss', options)
    .load(path)
    .then(function (result) {
      if (!result) {
        console.log(
          'PostCSS Config could not be loaded. Please check your PostCSS Config.'
        )
      }

      return result ? result.config : {}
    })

Looks like a publish failed somewhere... :(

The current published version breaks when I run it due to function parameter reassignment. I wanted to do a PR to fix this but then noticed it's already fixed in the source. Then I noticed the source version does not match the published version.

An in-range update of postcss is breaking the build 🚨

Version 5.2.8 of postcss just got published.

Branch Build failing 🚨
Dependency postcss
Current Version 5.2.7
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As postcss is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes 5.2.8
Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of postcss is breaking the build 🚨

Version 7.0.2 of postcss was just published.

Branch Build failing 🚨
Dependency postcss
Current Version 7.0.1
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

postcss is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • continuous-integration/travis-ci/push: The Travis CI build is in progress (Details).
  • continuous-integration/appveyor/branch: AppVeyor build failed (Details).

Release Notes 7.0.2
  • Fix warning text (by @rapzo).
FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Using loader.addDependency inside config

Problem

Plugins like postcss-simple-vars or postcss-properties etc allow variables to be specified. These variables are usually imported from other files. Even though webpack reloads when postcss.config.js is modifier, the same doesn't happen for variable files imported in postcss.config.js. Is there a way to access loader.addDependency so that imported files can be added manually? Or is there another way to achieve this?

An in-range update of standard is breaking the build 🚨

Version 8.6.0 of standard just got published.

Branch Build failing 🚨
Dependency standard
Current Version 8.5.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As standard is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Commits

The new version differs by 10 commits .

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

Can't reexport shared configuration

Problem

I want to share my postcss config across packages, so I created one package which just holds the config:
my-postcss-config-pkg/index.js

var prefixer = require('autoprefixer')({
  browsers: ['Explorer >= 11'],
})

module.exports = {
  plugins: [
    prefixer
  ],
};

In my app package I want to use it, so I created a postcss config there which just reexports the shared config:
app-pkg/postcss.config.js

module.exports = require('my-postcss-config-pkg');

but this actually doesn't prefix anything. I also tested it with wrapping autoprefixer with a log statement and it does indeed only get called for one file which contains nothing to prefix anyway.

I found out that I need to use Object.assign:

const config = require('my-postcss-config-pkg');
module.exports = Object.assign({}, config);

which makes totally no sense to me. Is this a bug?

Environment

Please provide information about your environment.

OS Node npm PostCSS
arch 6.3.1 3.10.3 postcss-loader 1.3.3

Custom plugins examples

We need to add examples, how to set custom plugins in config. Like ./my-plugin.

This config doesn’t work:

module.exports = {
  plugins: {
    './postcss-plugin': 2
  }
}
Module build failed: Error: Cannot find module './postcss-plugin'
    at Function.Module._resolveFilename (module.js:455:15)
    at Function.Module._load (module.js:403:25)
    at Module.require (module.js:483:17)
    at require (internal/module.js:20:19)
    at load (/home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:21:50)
    at /home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:27:18
    at Array.forEach (native)
    at loadPlugins (/home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:26:24)
    at /home/ai/Dev/test/node_modules/postcss-load-config/index.js:20:18

This config doesn’t work too:

module.exports = {
  plugins: [
    require('./postcss-plugin')(2)
  ]
}
Module build failed: Error: Cannot find module '0'
    at Function.Module._resolveFilename (module.js:455:15)
    at Function.Module._load (module.js:403:25)
    at Module.require (module.js:483:17)
    at require (internal/module.js:20:19)
    at load (/home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:21:50)
    at /home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:27:18
    at Array.forEach (native)
    at loadPlugins (/home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:26:24)
    at /home/ai/Dev/test/node_modules/postcss-load-config/index.js:20:18

An in-range update of jsdoc-to-markdown is breaking the build 🚨

Version 2.0.1 of jsdoc-to-markdown just got published.

Branch Build failing 🚨
Dependency jsdoc-to-markdown
Current Version 2.0.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As jsdoc-to-markdown is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Commits

The new version differs by 4 commits .

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of cssnano is breaking the build 🚨

Version 4.0.5 of cssnano was just published.

Branch Build failing 🚨
Dependency cssnano
Current Version 4.0.4
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

cssnano is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • continuous-integration/appveyor/branch: AppVeyor build failed (Details).
  • continuous-integration/travis-ci/push: The Travis CI build could not complete due to an error (Details).

Release Notes 4.0.5

Bug Fixes

  • postcss-merge-longhand now correctly merges borders with custom properties.
  • postcss-merge-longhand doesn't throw error in some border merge cases.
FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

An in-range update of cssnano is breaking the build 🚨

Version 3.8.2 of cssnano just got published.

Branch Build failing 🚨
Dependency cssnano
Current Version 3.8.1
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As cssnano is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪


Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details
Release Notes v3.8.2
  • Resolves an issue where display: list-item inline flow would be normalized to inline list-item rather than inline-list-item (thanks to @mattbasta).
Commits

The new version differs by 4 commits .

See the full diff.

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

Specify path to config file

Problem

I want to place my postcss.config.js in a config dir, not in the root of my project, but then it's not discovered.

Details

It will be next to the config used by webpack if the postcss-loader could be told that, but maybe a key in package.json could point to it?

Environment

Please provide information about your environment.

OS Node yarn PostCSS
[email protected] 6.9.1 0.18.0 postcss-loader: 1.2.0

An in-range update of cssnano is breaking the build 🚨

Version 4.1.0 of cssnano was just published.

Branch Build failing 🚨
Dependency cssnano
Current Version 4.0.5
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

cssnano is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • continuous-integration/travis-ci/push: The Travis CI build is in progress (Details).
  • continuous-integration/appveyor/branch: AppVeyor build failed (Details).

Release Notes 4.1.0

Bug Fixes

  • postcss-merge-longhand doesn't mangle borders.

Features

  • postcss-ordered-values support ordering animation values.
FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Using webpack config instead of postcss

I created a webpack test case: https://github.com/ai/webpack2-postcss-test

It runs PostCSS config test by webpack --config webpack2.config.js.

And I got error:

> webpack --config webpack2.config.js

Hash: 4c7045863603cdc062c1
Version: webpack 2.1.0-beta.25
Time: 401ms
    Asset     Size  Chunks             Chunk Names
./app2.js  2.81 kB       0  [emitted]  main
   [1] ./index.js 33 bytes {0} [built]
    + 1 hidden modules

ERROR in ./index.css
Module build failed: TypeError: Cannot convert undefined or null to object
    at loadPlugins (/home/ai/Dev/test/node_modules/postcss-load-plugins/lib/loadPlugins.js:26:10)
    at /home/ai/Dev/test/node_modules/postcss-load-config/index.js:19:18
 @ ./index.js 1:10-32

When I debuged loadConfig function in postcss-load-config I got that it has in result:

{ config: 
   { entry: './index.js',
     output: { filename: './app2.js' },
     module: { rules: [Object] } },
  filepath: '/home/ai/Dev/test/webpack2.config.js' }

Seems like cosmiconfig got webpack config because it track --config argument. I think it is not expected behavior.

@davidtheclark I am not sure, in what repo I should create a issue. If cosmiconfig really takes arguments, we should add option to do it only from stylelint/postcss CLI tools and doesn’t do it from webpack/gulp plugins.

Can't change postcss.config file name

I use postcss-loader and I want to specify path to my postcss config file.

{
  loader: postcssLoader,
  options: {
    config: {
      path: path.resolve(__dirname, '../../ui-kit.postcss.config.js')
    }
  }
}

Notice, that my file name is not postcss.config.js, but ui-kit.postcss.config.js. With that config I get error:

Module build failed: ModuleBuildError: Module build failed: Error: No PostCSS Config found in: /Users/yankovskyandrey/Code/hr/packages/csssr-ui-kit/ui-kit.postcss.config.js

If I change the name of file to postcss.config.js, than everything is ok.

I dove in source code and found that problem is in integration between postcss-loader, postcss-load-config and cosmiconfig package.
postcss-loader calls postcss-load-config postcssrc(rc.ctx, rc.path, { argv: false }), then postcss-load-config calls cosmicconfig config('postcss', options). Inside cosmiconfig:

module.exports = function (moduleName, options) {
  options = assign({
    packageProp: moduleName,
    rc: '.' + moduleName + 'rc',
    js: moduleName + '.config.js',
    argv: 'config',
    rcStrictJson: false,
    stopDir: oshomedir(),
    cache: true,
  }, options);

and then

        var directory = (searchPathIsDirectory)
          ? absoluteSearchPath
          : path.dirname(absoluteSearchPath);
        return searchDirectory(directory);

and in searchDirectory

return loadJs(path.join(directory, options.js));

So, basically, file name is ignored.

Fix behaviour when config loading failes

I have no postcss configs. And several log messages at webpack log as result of using postcss-loader.

TypeError: Cannot read property 'config' of null
    at .../node_modules/postcss-load-config/index.js:44:22

Default option

Now I need to set false for default options:

autoprefixer: false

But it looks like disabling Autoprefixer.

What do you think about null?

autoprefixer: null

Does not see postcss.config.js file

Problem

FIle postcss.config.js does nothing, plugin does not see it

Details

webpack.config.js

 {
        test: /\.(css|sss)$/,
        use : [
          'isomorphic-style-loader',
          {
            loader : 'css-loader',
            options: {
              context        : path.join(__dirname, '..', 'app'),
              sourceMap      : true,
              importLoaders : 1,
            }
          },
          {
            loader: 'postcss-loader',
            options: {
              config: {
                path: path.join(__dirname, '..', 'postcss.config.js'),
              },
              modules: {
                generateScopedName: isDebug ? '[path]-[local]___[hash:base64:5]' : '[hash:base64:5]',
              }
            }
          }
        ]
      }

config options does not influence. Does not work with and without it

postcss.config.js

module.exports = ({ file, options, env }) => {
  console.log('IN postcss.config.js'.file, options)
  return {
    parser: file.extname === '.sss' ? 'sugarss' : false,
    plugins: {
      'postcss-easy-import': { root: file.dirname, extensions: ['sss', 'css'] },
      'postcss-cssnext': options.cssnext ? options.cssnext : false,
      autoprefixer: env === 'production' ? options.autoprefixer : false,
      cssnano: env === 'production' ? options.cssnano : false,
      stylelint: {},
      'postcss-modules': {},
      'postcss-sorting': {},
    },
  }
}

console.log never fires

Error Logs

No errors

Issue [ Code ]

Please remember that, with sample code; it's easier to reproduce bug and much
faster to fix it.

Please refer to a simple code example.

$ git clone https://github.com/<user>/<sample>

Environment

Please provide information about your environment.

OS Node npm PostCSS
[windows 10 64][8.4.0] [5.0.3] [6.0.9]

Making use of babel transpilation on postcss.config.js

In webpack you can transpile the config files by just using babel.js extension instead of .js (webpack-dev.babel.js for example).

Would be nice if postcss.config.js runs the same. Maybe postcss.config.babel.js. This way we can use js syntax through babel.

using webpack context path

Problem

If i use webpack.LoaderOptionsPlugin(), there is a independent "context" fields.

new webpack.LoaderOptionsPlugin({
  options: {
    context: path.join(APP_DIR, "app/assets"),
    postcss: function(webpack) {
      return [plugins]
    }
  }
})

I can modify that context, and postcss use it.

But if i use postcss.config.js, there is no options for independent context.
Postcss will just using webpack's context, not it's own context.

maybe, postcss.config.js can also handle that context like

module.exports = (ctx) => ({
  context: path.join(APP_DIR, "app/assets"),
  plugins: {
    ...
  }
})

Add `undefined` check

Details

Check forundefined in the plugin loader (postcss-load-plugins #67)

- if (options === null || Object.keys(options).length === 0)
+ if (options === null || options === undefined || Object.keys(options).length === 0)

Its being tested only if the options {Object} is null, if the {Object} is not null it tries to
look at the keys of the {Object}, but I believe that its being forgotten the case when the options {Object} is undefined

Error (Logs|Stacks)

postcss.config.js

module.exports = ({ file, options, env }) => {
    return {
        parser: file.extname === '.sss' ? 'sugarss' : false,
        plugins: {
            'postcss-import': { root: file.dirname },
            'postcss-cssnext': options.cssnext ? options.cssnext : false, // <=
            'autoprefixer': env == 'production' ? options.autoprefixer : false,
            'cssnano': env === 'production' ? options.cssnano : false
        }
    }
}
Module build failed: TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)
    at load (/home/matheus/Repositorios/fidelidade-online/node_modules/postcss-load-plugins/lib/plugins.js:42:38)
    at /home/matheus/Repositorios/fidelidade-online/node_modules/postcss-load-plugins/lib/plugins.js:66:18
    at Array.forEach (<anonymous>)
    at plugins (/home/matheus/Repositorios/fidelidade-online/node_modules/postcss-load-plugins/lib/plugins.js:65:8)
    at /home/matheus/Repositorios/fidelidade-online/node_modules/postcss-load-config/index.js:64:18
    at <anonymous>

Reproduction (Code)

  • Not needed

Environment

  • Not needed

Case sensitive config will fail to load on Linux systems

Issue description

When loading a config file, case sensitivity is important on Linux systems. This is not the case on Windows or MacOS.

Steps to reproduce the issue

  1. Create a project using postcss loader and webpack 4, with the following Css loader rule:
    test: /\.css$/,
    use: [
      'style-loader',
      MiniCssExtractPlugin.loader,
      {
        loader: 'css-loader',
        options: {
          importLoaders: 1,
          sourceMap: true
        }
      },
      {
        loader: 'postcss-loader',
        options: {
          config: {
            path: path.resolve(__dirname, 'postCSS.config.js')
          },
          sourceMap: true
        }
      }
    ]
  }

(note the case of postCSS.config.js in path.resolve)

  1. Create a postcss config file named postCSS.config.js with any valid content.
  2. Build on windows / macOS, all will work fine.
  3. Switch to a linux machine and build there, the system's case sensitivity will cause the build to fail

What's the expected result?

  • It is expected that the file will be found on all systems, given the filename case matches that in options.config.path

What's the actual result?

  • A build failure, caused by the error:
    Module build failed: ModuleBuildError: Module build failed: Error: No PostCSS Config found in: /some-app/some-package/postCSS.config.js

Additional details / screenshot

I am assuming that somewhere the case sensitivity provided in options.config.path is not being honored. It would be nice to get this fixed, but if that is not possible, an error message tip, suggesting that postcss.config.js's case is important would be greatly appreciated.

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.