Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Core functionality for selecting browsers based on queries. The main browserslist function resolves human-readable queries into specific browser versions using Can I Use database data.
The primary browserslist function that accepts queries and returns browser lists.
/**
* Return array of browsers by selection queries
* @param queries - Browser queries (string, array, or undefined for defaults)
* @param opts - Options object for configuration
* @returns Array with browser names in Can I Use format
*/
function browserslist(
queries?: string | string[],
opts?: BrowserslistOptions
): string[];
interface BrowserslistOptions {
/** Path to processed file, used to find config files (default: ".") */
path?: string;
/** Processing environment for config selection (default: "production") */
env?: string;
/** Path to config file with queries */
config?: string;
/** Custom browser usage statistics for "> 1% in my stats" query */
stats?: string | object;
/** Do not throw on unknown version in direct query (default: false) */
ignoreUnknownVersions?: boolean;
/** Disable security checks for extend query (default: false) */
dangerousExtend?: boolean;
}Usage Examples:
const browserslist = require("browserslist");
// Use default queries
const defaultBrowsers = browserslist();
// => ['chrome 88', 'firefox 85', 'safari 14', 'edge 88', ...]
// Single query string
const browsers = browserslist('last 2 versions');
// => ['chrome 88', 'chrome 87', 'firefox 85', 'firefox 84', ...]
// Multiple queries as string
const browsers2 = browserslist('last 2 versions, > 1%, not dead');
// Multiple queries as array
const browsers3 = browserslist(['last 2 versions', '> 1%', 'not dead']);
// With options
const browsers4 = browserslist('> 1%', {
path: '/path/to/project',
env: 'development'
});Browserslist supports a wide range of query patterns:
Version-based queries:
last 2 versions - Last 2 versions of all browserslast 2 Chrome versions - Last 2 versions of specific browserlast 2 major versions - Last 2 major versions of all browserschrome >= 88 - Chrome version 88 and abovefirefox 85-90 - Firefox versions 85 through 90Usage-based queries:
> 1% - Browsers with more than 1% global usage>= 0.5% - Browsers with 0.5% or more global usage> 1% in US - More than 1% usage in specific country> 1% in my stats - More than 1% in custom statisticsDate-based queries:
last 2 years - Browsers released in last 2 yearssince 2015 - Browsers released since 2015since 2015-03 - Browsers released since March 2015since 2015-03-10 - Browsers released since specific dateSpecial queries:
defaults - Default browserslist queriesdead - Browsers without official support or updatesnot dead - Exclude dead browsersFirefox ESR - Firefox Extended Support Releaseelectron >= 1.0 - Electron versions (maps to Chrome)Coverage queries:
cover 99.5% - Browsers that cover 99.5% of global usagecover 95% in US - Browsers covering 95% in specific countryNegation:
not ie <= 10 - Exclude Internet Explorer 10 and belownot dead - Exclude browsers without supportConfiguration extending:
extends @company/browserslist-config - Extend from shared configBrowserslist behavior can be controlled via environment variables:
BROWSERSLIST - Override queries directlyBROWSERSLIST_CONFIG - Override config file pathBROWSERSLIST_ENV - Override environment nameBROWSERSLIST_STATS - Override stats file pathBROWSERSLIST_DISABLE_CACHE - Disable cachingNODE_ENV - Used as fallback environment name/** Default queries used when no queries specified */
browserslist.defaults: string[];
// Value: ['> 0.5%', 'last 2 versions', 'Firefox ESR', 'not dead']
/** Browser data from Can I Use database */
browserslist.data: object;
/** Browser name aliases for compatibility */
browserslist.aliases: object;
// Examples: { fx: 'firefox', ff: 'firefox', ios: 'ios_saf', explorer: 'ie' }
/** Version aliases for browsers with joined versions */
browserslist.versionAliases: object;Browserslist provides different behavior in browser vs Node.js environments:
Node.js environment:
Browser environment:
The browserslist function throws BrowserslistError for:
// Unknown browser names
browserslist('unknownbrowser 1'); // throws BrowserslistError
// Invalid query syntax
browserslist('invalid query syntax'); // throws BrowserslistError
// Unknown versions (unless ignoreUnknownVersions: true)
browserslist('chrome 999'); // throws BrowserslistError
// Invalid configuration
browserslist(null, { config: 'nonexistent.json' }); // throws BrowserslistError