设置Facebook Pixel仅用于在ReactJS中进行生产

时间:2019-01-02 16:42:05

标签: reactjs facebook environment-variables

我将React用作前端(Rails用作后端)。

我正在设置Facebook Pixel Events Manager来跟踪我在我的网站上的Facebook广告。

因此我将此脚本添加到了public / index.html中:

<!-- Facebook Pixel Code -->
<script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', 'MYID');
  fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=MYID&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->

并且在我的React Components中,只要单击按钮并引发事件,我都会添加此回调函数:

() => fbq('track', 'MyEvent');

这似乎可行,尽管我只需要在生产中启动像素即可。我无法访问process.env.NODE_ENV中的public/index.html

如何使此代码仅在生产中使用?

2 个答案:

答案 0 :(得分:1)

在我的大多数简单应用程序中,我选择通过将JS变量打印到html页面中来进行管理。我更喜欢goto是Handlebars,然后将配置对象注入包含类似内容的标头中。

    <script type="application/javascript">
      var CONFIG = {
        fbPixel: '{{ fbPixel }}'
      }
    </script>

fbPixel来自配置文件,仅在暂存和生产环境中填充。在开发中,它是未定义/空的。快速简便的设置。在我更复杂的应用程序中,我基本上仍会执行相同的操作,但是在中间使用帮助程序功能进行验证并允许使用默认选项。

答案 1 :(得分:0)

由于@Dvid Silva和@Russ Brown,我最终采用了以下解决方案:创建两个单独的index.html文件:dev-index.htmlprod-index.html

在我的config/path.js中:

module.exports = {
#[...]
  appHtml: process.env.NODE_ENV === 'production' ? resolveApp('public/prod-index.html') : resolveApp('public/dev-index.html'),
#[...]
};

两个索引文件都相同,除了生产文件的<head>标记内有Facebook Pixel。