#swc-plugin #swc #plugin #invariants #dev #port #warnings

swc-plugin-dev-expression

babel-plugin-dev-expression 的 SWC 版本,用于展开 __DEV__ 并包裹 invariant 和 warning 调用

5 个版本

0.2.11 2023年1月30日
0.2.10 2023年1月30日
0.2.2 2022年12月22日
0.2.1 2022年12月22日
0.2.0 2022年12月22日

#1816解析器实现

GPL-3.0-or-later

18KB
266

swc-plugin-dev-expression npm Crates.io GitHub

Facebook 的 dev-expression Babel 插件 的移植。

此插件将 warning() 调用的访问权限限制在 process.env.NODE_ENV !== 'production' 之下,将 invariant() 调用的条件提升到函数调用之外,并将 __DEV__ 表达式替换为 NODE_ENV 检查。大多数打包器将完全从生产代码中删除这些调用。应用于 warning()invariant() 的转换与 babel-plugin-dev-expression 的行为相同。而 __DEV__ 的转换不同,且仅在更受限的条件下进行,以简化实现。请参见以下注释。

invariant

替换为

invariant(condition, argument, argument);

使用

if (!condition) {
  if ("production" !== process.env.NODE_ENV) {
    invariant(false, argument, argument);
  } else {
    invariant(false);
  }
}

建议与 https://github.com/zertosh/invariant 或更小的 https://github.com/alexreardon/tiny-invariant 一起使用。

warning

替换为

warning(condition, argument, argument);

使用

if ("production" !== process.env.NODE_ENV) {
  warning(condition, argument, argument);
}

推荐与https://github.com/r3dm/warning或更小的https://github.com/alexreardon/tiny-warning一起使用。

__DEV__

替换为

if (__DEV__) {}
(__DEV__ ? yes() : no());
!__DEV__;
(__DEV__ && true);
(__DEV__ || false);

使用

if(process.env.NODE_ENV !== 'production') {}
(process.env.NODE_ENV !== 'production' ? yes() : no());
!(process.env.NODE_ENV !== 'production');
(process.env.NODE_ENV !== 'production') && true;
(process.env.NODE_ENV !== 'production') || false;

注意:插件不会转换对__DEV__的每一个引用。只有在__DEV__是一个if语句或?条件表达式中的整个条件,或者__DEV__是逻辑表达式的参数(!&&||)时,才会进行这种替换。如果这种限制对您的使用造成任何问题,请与我们联系。

## 许可 本项目的版权属于Angel Wells,许可协议为GPL 3.0或更高版本。

依赖项

~5–11MB
~142K SLoC