我正在与 gatsby 一起在一个新项目中工作并阅读有关如何在生产中删除 proptypes 我发现了这个:https://github.com/gatsbyjs/gatsby/pull/14987我的问题是默认情况下这是如何工作的(如果它适用于我的代码而不仅仅是 gatsby 的核心)?或者我应该做些什么来删除我代码中的所有 proptypes?
在运行 gatsby build && gatsby serve
之后,proptypes 仍然存在,我还尝试添加自定义 .babelrc
并直接使用此插件没有结果 https://github.com/oliviertassinari/babel-plugin-transform-react-remove-prop-types
最佳答案
简短回答:是的,PropTypes
默认被移除。
TLTR
React/Gatsby 应用程序与 PropTypes
完美配合。所描述的问题是关于是否在生产构建中应该删除这些 PropTypes
的公开辩论,因为代码在部署之前应该是连贯的、健壮的并且在 development
环境中有效在 production
环境中构建。
如果您假设您在 development
中的代码必须有效且 PropType
友好,您可以推断您可以省略 PropType
验证在 production
环境中减少带宽并缩短构建/部署时间,因为验证和审查是在 development
下完成的。
因此,默认情况下,您的 PropTypes
将在 production
构建中删除。
你不需要添加任何额外的配置,因为默认情况下,Gatsby 使用这个 .babelrc
结构:
{
"plugins": ["@babel/plugin-proposal-optional-chaining",],
"presets": [
[
"babel-preset-gatsby", //here your are adding the preset
{
"targets": {
"browsers": [">0.25%", "not dead"]
}
}
]
]
}
正如您在此 GitHub pull-request 中看到的那样在babel-preset-gatsby
dependencies 包被添加到默认预设中。
此包中添加的更改仅影响项目的核心,而不影响 /node_modules
中的依赖项。
你看到的是 DefaultProps
,这是一个默认值,由于某种原因(例如 CMS 问题)React 组件没有接收到 props 并通过提供一个来避免代码中断默认值。
总结:
- 默认情况下,如果您使用默认的
.babelrc
集成,您的PropTypes
将在production
环境中被删除。 - 您的
node_modules
依赖项不会受到此次添加 Gatsby Babel 预设的影响。 - 您看到的是
DefaultProps
,这是一种在使用PropTypes
或数据获取问题时避免代码破坏的方法,尤其是在需要时。
关于javascript - gatsby 是否默认删除 proptypes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63254512/