我将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
。
如何使此代码仅在生产中使用?
答案 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.html
和prod-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。