包详细信息

@stylexjs/babel-plugin

facebook168.3kMIT0.15.3

StyleX babel plugin.

自述文件

@stylexjs/babel-plugin

StyleX expects you to transform all js/ts/tsx files with @stylexjs/babel-plugin. In addition to transforming JS code, this plugin also produces an Array of CSS rules. All the CSS rules generated from all JS files within your project should be concatenated together and converted to a CSS file using the processStyles function which is also exported from the same module.

@stylexjs/babel-plugin is fairly lightweight. It pre-computes stylex related functions like create and keyframes by converting the argument AST to a JS object and transforming them by passing them to the functions of the corresponding names within @stylex/shared

Babel Metadata

The StyleX Babel plugin does more than transform JavaScript (or TypeScript) files. It also returns a list of injected styles. The way that such a value can be returned while transforming a JS file is by using Babel's metadata API.

An example of this can be seen in some of the tests, but the result of using Babel's transform(...) function returns an object contains at least two keys:

  1. code which is the transformed JS code
  2. metadata is an object of metadata that the plugin may want to return as a side-effect.

e.g.

const result = transformSync(sourceCode, {
  filename: opts.filename,
  parserOpts: { flow: { all: true } },
  plugins: [stylexPlugin, opts],
});

const transformedCode = result.code;
const injectedStyles = result.metadata.stylex;

更新日志

Changelog

0.15.3 (Aug 13, 2025)

  • Optimize precomputed props calls in JSX.
  • Fix class name construction for dynamic contextual styles.
  • Handle all unit values in media query rewriting.

0.15.2 (Aug 1, 2025)

  • Exclude private dependencies from @stylexjs/babel-plugin package.
  • Reduce chances of dynamic variable name collisions.

0.15.1 (Aug 1, 2025)

Fixes

  • Hoist stylex.create and static className objects to the top level for support inside functions.

0.15.0 (Jul 31, 2025)

New features

  • Enable media query ordering and parsing behind enableMediaQueryOrder flag.
  • Integrate media query parser for automatic media query validation and normalization.

Fixes

  • Implement merging of width, height, and ranges in media query transformer.
  • Optimize dynamic styles output for conditionals and template literals.
  • Fix TypeScript types for stylex.types.* functions.
  • Fix opaque type issues for InlineStyles.

0.14.3 (Jul 22, 2025)

Fixes

  • Do not emit class names for null or undefined dynamic styles.
  • Optimize dynamic styles output for binary and unary expressions.

0.14.2 (Jul 14, 2025)

Fixes

  • ESLint plugin style validation for length properties (#1136)
  • Remove legacy RTL flipping of boxShadow, cursor, textShadow values.

0.14.1 (Jul 3, 2025)

Fixes

  • Another fix for TypeScript types.

0.14.0 (Jun 30, 2025)

New features

  • Add viewTransitionClass API for creating CSS View Transitions.
  • ESLint plugin includes validImports options for all rules.
  • ESLint plugin includes autofix for all remaining nonstandard CSS properties when using the valid-styles rule.

Breaking changes

  • Make property-specificity the default styleResolution.

Fixes

  • Fix theming in dev/debug mode.
  • Avoid putting certain @-rules in @layer blocks.
  • Fix type exports for TypeScript.

0.13.1 (May 21, 2025)

Fixes

  • Export additional Types.

0.13.0 (May 19, 2025)

New features

  • Add positionTry API for creating @property-try declarations.
  • Add defineConsts API for inlining constant values.
  • Re-write of the runtime style injection module to be more reliable.

Breaking changes

  • The runtimeInjection compiler option is now disabled by default when dev is true.
  • The ESLint rule no-legacy-conditional-styles is renamed to no-legacy-contextual-styles.
  • The useRemForFontSize compiler option is renamed to enableFontSizePxToRem. It is disabled by default and should not be used directly.
  • The genConditionalClasses compiler option is renamed to enableInlinedConditionalMerge. It is enabled by default and should not be used directly.
  • The attrs API is removed due to low usage and redundancy with the props API.

Fixes

  • Fix the TypeScript types for themes and types functions.
  • Fix the creation of duplicate classNames when defining nested pseudo-classes.
  • Fix that allows the ESLint plugin to support use of importSources object syntax in validImports.
  • Fix incorrect compiler error messages.
  • Fix a bug that incorrectly wrapped CSS variables in quotes when used in the content property.
  • Fix a bug in the firstThatWorks API when the last value was a variable.
  • Allow importSources to be configured in the PostCSS plugin for React Strict DOM compatibility.

Deprecations

  • Deprecate @stylexjs/shared package.

0.12.0 (Apr 10, 2025)

New features

  • Hash keys in compiled style objects to reduce generated code size.
  • New eslint rule to flag use of legacy Media Query and pseudo-class syntax.

Fixes

  • Fix pseudo-elements bug in dynamic styles.
  • Performance improvements to createTheme compilation by caching object evaluation.
  • Disallow spreading in create calls.

Deprecations

  • Deprecate @stylexjs/dev-runtime package.
  • Deprecate @stylexjs/esbuild-plugin package.
  • Deprecate @stylexjs/nextjs-plugin package.
  • Deprecate @stylexjs/open-props package.
  • Deprecate @stylexjs/webpack-plugin package.

0.11.1 (Mar 3, 2025)

Fixes

  • Fix create compilation regression for string and number keys.
  • Fix babel path resolution within monorepos.

0.11.0 (Feb 27, 2025)