Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 盖茨比是否默认删除proptypes?_Javascript_Reactjs_Gatsby - Fatal编程技术网

Javascript 盖茨比是否默认删除proptypes?

Javascript 盖茨比是否默认删除proptypes?,javascript,reactjs,gatsby,Javascript,Reactjs,Gatsby,我和盖茨比在一个新项目中工作,阅读了关于如何在生产中删除proptypes的文章。我发现:我的问题是,默认情况下,这是如何工作的(如果它对我的代码有效,而不仅仅是对盖茨比的核心有效)?或者我应该做些什么来删除代码中的所有proptype 运行gatsby build&&gatsby serve后,proptypes仍然存在,我还尝试添加一个自定义的。babelrc,并直接使用这个插件,没有结果。简短回答:是的,proptypes在默认情况下被删除 TLTR React/Gatsby应用程序与P

我和盖茨比在一个新项目中工作,阅读了关于如何在生产中删除proptypes的文章。我发现:我的问题是,默认情况下,这是如何工作的(如果它对我的代码有效,而不仅仅是对盖茨比的核心有效)?或者我应该做些什么来删除代码中的所有proptype


运行
gatsby build&&gatsby serve后,proptypes仍然存在,我还尝试添加一个自定义的
。babelrc
,并直接使用这个插件,没有结果。

简短回答:是的,
proptypes
在默认情况下被删除


TLTR React/Gatsby应用程序与
PropTypes
完美配合。所描述的问题是关于是否在生产构建中,这些
PropTypes
应该被删除的公开辩论,因为在
开发
环境中部署或构建之前,代码应该是一致的、健壮的和有效的

如果您假定
开发
中的代码必须有效且
PropType
友好,那么您可以推断,您可以在
生产
环境中省略
PropType
验证,以减少带宽并缩短构建/部署时间,因为验证和审阅是在
开发

因此,默认情况下,您的
PropTypes
将在
production
build中删除

您不需要添加任何额外的配置,因为默认情况下,盖茨比使用此
。babelrc
结构:

{
  "plugins": ["@babel/plugin-proposal-optional-chaining",],
  "presets": [
    [
      "babel-preset-gatsby", //here your are adding the preset
      {
        "targets": {
          "browsers": [">0.25%", "not dead"]
        }
      }
    ]
  ]
}
正如您在本文档和附件中所看到的,包被添加到默认预设中

此包中添加的更改只影响项目的核心,而不影响
/node\u modules
中的依赖项

您看到的是一个
DefaultProps
,它是一个默认值,因为某些原因(例如CMS问题),React组件没有接收到props,并通过提供默认值来避免代码中断

总结:

  • 默认情况下,如果您使用默认的
    .babelrc
    集成,您的
    PropTypes
    将在
    生产
    环境中删除
  • 您的
    node\u模块
    依赖项不会受此添加的盖茨比巴贝尔预设的影响
  • 您看到的是
    DefaultProps
    ,这是一种在使用
    PropTypes
    或数据获取问题时避免代码中断的方法,特别是在需要时

我只是想重现你的问题,它对我有效。 我遵循以下步骤:

  • 创建新盖茨比网站:
    npx盖茨比新盖茨比网站
  • 构建站点:
    npm运行构建
  • 运行站点:
    npm运行服务
  • 例如,在
    标题中
    组件类型定义如下:

    Header.propTypes = {
      siteTitle: PropTypes.string,
    }
    
    Header.defaultProps = {
      siteTitle: ``,
    }
    
    检查完成的站点时,您只会看到
    defaultProps
    ,而不会看到
    propTypes
    ,这是正确的

    var r=n(“q1tI”)
    ,o=n.n(r)
    ,i=n(“Wbzz”)
    ,a=函数(e){
    var t=e.sitetile;
    返回o.a.createElement(“标题”{
    风格:{
    背景:“丽贝卡紫色”,
    marginBottom:“1.45雷姆”
    }
    },o.a.createElement(“div”{
    风格:{
    边距:“0自动”,
    最大宽度:960,
    填充:“1.45雷姆1.0875雷姆”
    }
    },o.a.createElement(“h1”{
    风格:{
    保证金:0
    }
    },o.a.createElement(i.Link{
    至:“/”,
    风格:{
    颜色:“白色”,
    文本装饰:“无”
    }
    },t)))
    };
    a、 defaultProps={
    网站名称:“
    };
    var c=a;
    
    您还可以通过将
    sitetTitle
    设置为
    PropTypes.number

    Header.propTypes = {
      siteTitle: PropTypes.number,
    }
    
    使用
    npm run develope
    在开发中运行时,您将在控制台中看到一条警告

    Failed prop type: Invalid prop `siteTitle` of type `string` supplied to `Header`, expected `number`.
    
    当运行
    npm-run-build和&npm-run-service时,您在生产中不会看到这一点

    注意:
    propTypes
    defaultProps
    有所不同

    你也检查过你的盖茨比版本了吗?可能您正在运行旧版本

    我尝试过使用这些版本(最新发布时)

    "dependencies": {
        "gatsby": "^2.24.26",
        "gatsby-image": "^2.4.14",
        "gatsby-plugin-manifest": "^2.4.21",
        "gatsby-plugin-offline": "^3.2.21",
        "gatsby-plugin-react-helmet": "^3.3.10",
        "gatsby-plugin-sharp": "^2.6.24",
        "gatsby-source-filesystem": "^2.3.23",
        "gatsby-transformer-sharp": "^2.5.12",
        "prop-types": "^15.7.2",
        "react": "^16.12.0",
        "react-dom": "^16.12.0",
        "react-helmet": "^6.1.0"
      },